mirror of
https://github.com/eosswedenorg/thalos
synced 2026-06-27 10:53:42 +02:00
Update to use antelope-go instead of eos-go library
This commit is contained in:
parent
8aa93dd078
commit
63da39f03b
7 changed files with 181 additions and 211 deletions
|
|
@ -5,19 +5,20 @@ import (
|
|||
"fmt"
|
||||
"time"
|
||||
|
||||
eos "github.com/eoscanada/eos-go"
|
||||
"github.com/eosswedenorg/thalos/internal/cache"
|
||||
"github.com/pnx/antelope-go/api"
|
||||
"github.com/pnx/antelope-go/chain"
|
||||
)
|
||||
|
||||
// AbiManager handles an ABI cache that fetches the ABI from an API on cache miss.
|
||||
type AbiManager struct {
|
||||
cache *cache.Cache
|
||||
api *eos.API
|
||||
api *api.Client
|
||||
ctx context.Context
|
||||
}
|
||||
|
||||
// Create a new ABI Manager
|
||||
func NewAbiManager(cache *cache.Cache, api *eos.API) *AbiManager {
|
||||
func NewAbiManager(cache *cache.Cache, api *api.Client) *AbiManager {
|
||||
return &AbiManager{
|
||||
cache: cache,
|
||||
api: api,
|
||||
|
|
@ -26,24 +27,24 @@ func NewAbiManager(cache *cache.Cache, api *eos.API) *AbiManager {
|
|||
}
|
||||
|
||||
// Set or update an ABI in the cache.
|
||||
func (mgr *AbiManager) SetAbi(account eos.AccountName, abi *eos.ABI) error {
|
||||
func (mgr *AbiManager) SetAbi(account chain.Name, abi *chain.Abi) error {
|
||||
ctx, cancel := context.WithTimeout(mgr.ctx, time.Millisecond*500)
|
||||
defer cancel()
|
||||
return mgr.cache.Set(ctx, string(account), *abi, time.Hour)
|
||||
return mgr.cache.Set(ctx, account.String(), *abi, time.Hour)
|
||||
}
|
||||
|
||||
// Get an ABI from the cache, on cache miss it is fetched from the
|
||||
// API, gets cached and then returned to the user
|
||||
func (mgr *AbiManager) GetAbi(account eos.AccountName) (*eos.ABI, error) {
|
||||
var abi eos.ABI
|
||||
func (mgr *AbiManager) GetAbi(account chain.Name) (*chain.Abi, error) {
|
||||
var abi chain.Abi
|
||||
if err := mgr.cacheGet(account, &abi); err != nil {
|
||||
ctx, cancel := context.WithTimeout(mgr.ctx, time.Second)
|
||||
defer cancel()
|
||||
resp, err := mgr.api.GetABI(ctx, account)
|
||||
resp, err := mgr.api.GetAbi(ctx, account.String())
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("api: %s", err)
|
||||
}
|
||||
abi = resp.ABI
|
||||
abi = resp.Abi
|
||||
|
||||
err = mgr.SetAbi(account, &abi)
|
||||
if err != nil {
|
||||
|
|
@ -53,8 +54,8 @@ func (mgr *AbiManager) GetAbi(account eos.AccountName) (*eos.ABI, error) {
|
|||
return &abi, nil
|
||||
}
|
||||
|
||||
func (mgr *AbiManager) cacheGet(account eos.AccountName, value any) error {
|
||||
func (mgr *AbiManager) cacheGet(account chain.Name, value any) error {
|
||||
ctx, cancel := context.WithTimeout(mgr.ctx, time.Millisecond*500)
|
||||
defer cancel()
|
||||
return mgr.cache.Get(ctx, string(account), value)
|
||||
return mgr.cache.Get(ctx, account.String(), value)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,13 +1,14 @@
|
|||
package abi
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"net/http"
|
||||
"net/http/httptest"
|
||||
"strings"
|
||||
"testing"
|
||||
|
||||
eos "github.com/eoscanada/eos-go"
|
||||
"github.com/pnx/antelope-go/api"
|
||||
"github.com/pnx/antelope-go/chain"
|
||||
|
||||
"github.com/eosswedenorg/thalos/internal/cache"
|
||||
"github.com/stretchr/testify/assert"
|
||||
|
|
@ -73,7 +74,7 @@ var abiString = `
|
|||
}
|
||||
`
|
||||
|
||||
func assert_abi(t *testing.T, abi *eos.ABI) {
|
||||
func assert_abi(t *testing.T, abi *chain.Abi) {
|
||||
assert.Equal(t, abi.Version, "eosio::abi/1.0")
|
||||
|
||||
// Types
|
||||
|
|
@ -110,12 +111,12 @@ func assert_abi(t *testing.T, abi *eos.ABI) {
|
|||
assert.Equal(t, abi.Structs[3].Fields[0].Type, "string")
|
||||
|
||||
// Actions
|
||||
assert.Equal(t, abi.Actions[0].Name, eos.ActN("action_name_1"))
|
||||
assert.Equal(t, abi.Actions[0].Name, chain.N("action_name_1"))
|
||||
assert.Equal(t, abi.Actions[0].Type, "struct_name_1")
|
||||
assert.Equal(t, abi.Actions[0].RicardianContract, "")
|
||||
|
||||
// Tables
|
||||
assert.Equal(t, abi.Tables[0].Name, eos.TableName("table_name_1"))
|
||||
assert.Equal(t, abi.Tables[0].Name, chain.N("table_name_1"))
|
||||
assert.Equal(t, abi.Tables[0].Type, "struct_name_1")
|
||||
assert.Equal(t, abi.Tables[0].IndexType, "i64")
|
||||
assert.Equal(t, abi.Tables[0].KeyNames[0], "key_name_1")
|
||||
|
|
@ -124,15 +125,10 @@ func assert_abi(t *testing.T, abi *eos.ABI) {
|
|||
assert.Equal(t, abi.Tables[0].KeyTypes[1], "int")
|
||||
}
|
||||
|
||||
func mockAPI(handler http.HandlerFunc) (*eos.API, *httptest.Server) {
|
||||
func mockAPI(handler http.HandlerFunc) (*api.Client, *httptest.Server) {
|
||||
server := httptest.NewServer(handler)
|
||||
|
||||
return &eos.API{
|
||||
HttpClient: server.Client(),
|
||||
BaseURL: strings.TrimRight(server.URL, "/"),
|
||||
Compress: eos.CompressionZlib,
|
||||
Header: make(http.Header),
|
||||
}, server
|
||||
return api.New(server.URL), server
|
||||
}
|
||||
|
||||
func TestManager_GetAbiFromCache(t *testing.T) {
|
||||
|
|
@ -143,13 +139,14 @@ func TestManager_GetAbiFromCache(t *testing.T) {
|
|||
|
||||
mgr := NewAbiManager(cache, api)
|
||||
|
||||
abi, err := eos.NewABI(strings.NewReader(abiString))
|
||||
abi := chain.Abi{}
|
||||
err := json.Unmarshal([]byte(abiString), &abi)
|
||||
assert.NoError(t, err)
|
||||
|
||||
err = mgr.SetAbi("testaccount", abi)
|
||||
err = mgr.SetAbi(chain.N("testaccount"), &abi)
|
||||
assert.NoError(t, err)
|
||||
|
||||
c_abi, err := mgr.GetAbi("testaccount")
|
||||
c_abi, err := mgr.GetAbi(chain.N("testaccount"))
|
||||
assert.NoError(t, err)
|
||||
assert_abi(t, c_abi)
|
||||
}
|
||||
|
|
@ -166,8 +163,10 @@ func TestManager_GetAbiFromAPI(t *testing.T) {
|
|||
|
||||
mgr := NewAbiManager(cache, api)
|
||||
|
||||
c_abi, err := mgr.GetAbi("testaccount")
|
||||
c_abi, err := mgr.GetAbi(chain.N("testaccount"))
|
||||
assert.NoError(t, err)
|
||||
|
||||
fmt.Println(c_abi)
|
||||
|
||||
assert_abi(t, c_abi)
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue