diff --git a/internal/ship/contract_row.go b/internal/ship/contract_row.go index 5449e58..f980e90 100644 --- a/internal/ship/contract_row.go +++ b/internal/ship/contract_row.go @@ -1,6 +1,9 @@ package ship import ( + "bytes" + + "github.com/eosswedenorg/thalos/internal/abi" "github.com/mitchellh/mapstructure" "github.com/shufflingpixels/antelope-go/chain" ) @@ -19,3 +22,16 @@ func ParseContractRow(v map[string]interface{}) (*ContractRow, error) { err := mapstructure.WeakDecode(v, out) return out, err } + +func DecodeContractRow(manager *abi.AbiManager, data map[string]any) (any, error) { + row, err := ParseContractRow(data) + if err != nil { + return nil, err + } + + abi, err := manager.GetAbi(row.Code) + if err != nil { + return nil, err + } + return abi.DecodeTable(bytes.NewReader(row.Value), row.Table) +}