1
0
Fork 0
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:
Henrik Hautakoski 2024-04-29 21:00:45 +02:00
parent 8aa93dd078
commit 63da39f03b
7 changed files with 181 additions and 211 deletions

View file

@ -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)
}

View file

@ -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)
}