forked from cerc-io/ipld-eth-server
Remove unused contract methods
This commit is contained in:
parent
6c5bc673c0
commit
5a2bb04670
@ -14,84 +14,7 @@ import (
|
|||||||
|
|
||||||
var _ = Describe("Reading contracts", func() {
|
var _ = Describe("Reading contracts", func() {
|
||||||
|
|
||||||
Describe("Reading the list of attributes", func() {
|
|
||||||
It("returns a string attribute for a real contract", func() {
|
|
||||||
blockchain := geth.NewBlockchain(test_config.InfuraClient.IPCPath)
|
|
||||||
contract := testing.SampleContract()
|
|
||||||
|
|
||||||
contractAttributes, err := blockchain.GetAttributes(contract)
|
|
||||||
|
|
||||||
Expect(err).To(BeNil())
|
|
||||||
Expect(len(contractAttributes)).NotTo(Equal(0))
|
|
||||||
symbolAttribute := *testing.FindAttribute(contractAttributes, "symbol")
|
|
||||||
Expect(symbolAttribute.Name).To(Equal("symbol"))
|
|
||||||
Expect(symbolAttribute.Type).To(Equal("string"))
|
|
||||||
})
|
|
||||||
|
|
||||||
It("does not return an attribute that takes an input", func() {
|
|
||||||
blockchain := geth.NewBlockchain(test_config.InfuraClient.IPCPath)
|
|
||||||
contract := testing.SampleContract()
|
|
||||||
|
|
||||||
contractAttributes, err := blockchain.GetAttributes(contract)
|
|
||||||
|
|
||||||
Expect(err).To(BeNil())
|
|
||||||
attribute := testing.FindAttribute(contractAttributes, "balanceOf")
|
|
||||||
Expect(attribute).To(BeNil())
|
|
||||||
})
|
|
||||||
|
|
||||||
It("does not return an attribute that is not constant", func() {
|
|
||||||
blockchain := geth.NewBlockchain(test_config.InfuraClient.IPCPath)
|
|
||||||
contract := testing.SampleContract()
|
|
||||||
|
|
||||||
contractAttributes, err := blockchain.GetAttributes(contract)
|
|
||||||
|
|
||||||
Expect(err).To(BeNil())
|
|
||||||
attribute := testing.FindAttribute(contractAttributes, "unpause")
|
|
||||||
Expect(attribute).To(BeNil())
|
|
||||||
})
|
|
||||||
})
|
|
||||||
|
|
||||||
Describe("Getting a contract attribute", func() {
|
Describe("Getting a contract attribute", func() {
|
||||||
It("returns the correct attribute for a real contract", func() {
|
|
||||||
blockchain := geth.NewBlockchain(test_config.InfuraClient.IPCPath)
|
|
||||||
|
|
||||||
contract := testing.SampleContract()
|
|
||||||
name, err := blockchain.GetAttribute(contract, "name", nil)
|
|
||||||
|
|
||||||
Expect(err).To(BeNil())
|
|
||||||
Expect(name).To(Equal("OMGToken"))
|
|
||||||
})
|
|
||||||
|
|
||||||
It("returns the correct attribute for a real contract", func() {
|
|
||||||
blockchain := geth.NewBlockchain(test_config.InfuraClient.IPCPath)
|
|
||||||
contract := testing.SampleContract()
|
|
||||||
|
|
||||||
name, err := blockchain.GetAttribute(contract, "name", nil)
|
|
||||||
|
|
||||||
Expect(err).To(BeNil())
|
|
||||||
Expect(name).To(Equal("OMGToken"))
|
|
||||||
})
|
|
||||||
|
|
||||||
It("returns the correct attribute for a real contract at a specific block height", func() {
|
|
||||||
blockchain := geth.NewBlockchain(test_config.InfuraClient.IPCPath)
|
|
||||||
contract := testing.SampleContract()
|
|
||||||
|
|
||||||
name, err := blockchain.GetAttribute(contract, "name", big.NewInt(4701536))
|
|
||||||
|
|
||||||
Expect(name).To(Equal("OMGToken"))
|
|
||||||
Expect(err).To(BeNil())
|
|
||||||
})
|
|
||||||
|
|
||||||
It("returns an error when asking for an attribute that does not exist", func() {
|
|
||||||
blockchain := geth.NewBlockchain(test_config.InfuraClient.IPCPath)
|
|
||||||
contract := testing.SampleContract()
|
|
||||||
|
|
||||||
name, err := blockchain.GetAttribute(contract, "missing_attribute", nil)
|
|
||||||
|
|
||||||
Expect(err).To(Equal(geth.ErrInvalidStateAttribute))
|
|
||||||
Expect(name).To(BeNil())
|
|
||||||
})
|
|
||||||
|
|
||||||
It("retrieves the event log for a specific block and contract", func() {
|
It("retrieves the event log for a specific block and contract", func() {
|
||||||
expectedLogZero := core.Log{
|
expectedLogZero := core.Log{
|
||||||
BlockNumber: 4703824,
|
BlockNumber: 4703824,
|
||||||
|
@ -1,59 +0,0 @@
|
|||||||
package contract_summary
|
|
||||||
|
|
||||||
import (
|
|
||||||
"fmt"
|
|
||||||
|
|
||||||
"github.com/ethereum/go-ethereum/common"
|
|
||||||
"github.com/vulcanize/vulcanizedb/pkg/core"
|
|
||||||
)
|
|
||||||
|
|
||||||
func GenerateConsoleOutput(summary ContractSummary) string {
|
|
||||||
return fmt.Sprintf(template(),
|
|
||||||
summary.ContractHash,
|
|
||||||
summary.NumberOfTransactions,
|
|
||||||
transactionToString(summary.LastTransaction),
|
|
||||||
attributesString(summary),
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
func template() string {
|
|
||||||
return `********************Contract Summary***********************
|
|
||||||
HASH: %v
|
|
||||||
NUMBER OF TRANSACTIONS: %d
|
|
||||||
LAST TRANSACTION:
|
|
||||||
%s
|
|
||||||
ATTRIBUTES:
|
|
||||||
%s
|
|
||||||
`
|
|
||||||
}
|
|
||||||
|
|
||||||
func transactionToString(transaction *core.Transaction) string {
|
|
||||||
if transaction == nil {
|
|
||||||
return "NONE"
|
|
||||||
}
|
|
||||||
return fmt.Sprintf(`Hash: %s
|
|
||||||
To: %s
|
|
||||||
From: %s`, transaction.Hash, transaction.To, transaction.From)
|
|
||||||
}
|
|
||||||
|
|
||||||
func attributesString(summary ContractSummary) string {
|
|
||||||
var formattedAttributes string
|
|
||||||
for _, attribute := range summary.Attributes {
|
|
||||||
formattedAttributes += formatAttribute(attribute.Name, summary) + "\n" + " "
|
|
||||||
}
|
|
||||||
return formattedAttributes
|
|
||||||
}
|
|
||||||
|
|
||||||
func formatAttribute(attributeName string, summary ContractSummary) string {
|
|
||||||
var stringResult string
|
|
||||||
result := summary.GetStateAttribute(attributeName)
|
|
||||||
switch t := result.(type) {
|
|
||||||
case common.Address:
|
|
||||||
ca := result.(common.Address)
|
|
||||||
stringResult = fmt.Sprintf("%s: %v", attributeName, ca.Hex())
|
|
||||||
default:
|
|
||||||
_ = t
|
|
||||||
stringResult = fmt.Sprintf("%s: %v", attributeName, result)
|
|
||||||
}
|
|
||||||
return stringResult
|
|
||||||
}
|
|
@ -1,13 +0,0 @@
|
|||||||
package contract_summary_test
|
|
||||||
|
|
||||||
import (
|
|
||||||
. "github.com/onsi/ginkgo"
|
|
||||||
. "github.com/onsi/gomega"
|
|
||||||
|
|
||||||
"testing"
|
|
||||||
)
|
|
||||||
|
|
||||||
func TestContractSummary(t *testing.T) {
|
|
||||||
RegisterFailHandler(Fail)
|
|
||||||
RunSpecs(t, "ContractSummary Suite")
|
|
||||||
}
|
|
@ -1,52 +0,0 @@
|
|||||||
package contract_summary
|
|
||||||
|
|
||||||
import (
|
|
||||||
"math/big"
|
|
||||||
|
|
||||||
"github.com/vulcanize/vulcanizedb/pkg/core"
|
|
||||||
"github.com/vulcanize/vulcanizedb/pkg/datastore"
|
|
||||||
)
|
|
||||||
|
|
||||||
type ContractSummary struct {
|
|
||||||
Attributes core.ContractAttributes
|
|
||||||
BlockNumber *big.Int
|
|
||||||
Contract core.Contract
|
|
||||||
ContractHash string
|
|
||||||
LastTransaction *core.Transaction
|
|
||||||
NumberOfTransactions int
|
|
||||||
blockChain core.Blockchain
|
|
||||||
}
|
|
||||||
|
|
||||||
func NewSummary(blockchain core.Blockchain, contractRepository datastore.ContractRepository, contractHash string, blockNumber *big.Int) (ContractSummary, error) {
|
|
||||||
contract, err := contractRepository.GetContract(contractHash)
|
|
||||||
if err != nil {
|
|
||||||
return ContractSummary{}, err
|
|
||||||
}
|
|
||||||
return newContractSummary(blockchain, contract, blockNumber), nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (contractSummary ContractSummary) GetStateAttribute(attributeName string) interface{} {
|
|
||||||
var result interface{}
|
|
||||||
result, _ = contractSummary.blockChain.GetAttribute(contractSummary.Contract, attributeName, contractSummary.BlockNumber)
|
|
||||||
return result
|
|
||||||
}
|
|
||||||
|
|
||||||
func newContractSummary(blockchain core.Blockchain, contract core.Contract, blockNumber *big.Int) ContractSummary {
|
|
||||||
attributes, _ := blockchain.GetAttributes(contract)
|
|
||||||
return ContractSummary{
|
|
||||||
Attributes: attributes,
|
|
||||||
BlockNumber: blockNumber,
|
|
||||||
Contract: contract,
|
|
||||||
ContractHash: contract.Hash,
|
|
||||||
LastTransaction: lastTransaction(contract),
|
|
||||||
NumberOfTransactions: len(contract.Transactions),
|
|
||||||
blockChain: blockchain,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func lastTransaction(contract core.Contract) *core.Transaction {
|
|
||||||
if len(contract.Transactions) > 0 {
|
|
||||||
return &contract.Transactions[0]
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
@ -1,149 +0,0 @@
|
|||||||
package contract_summary_test
|
|
||||||
|
|
||||||
import (
|
|
||||||
"math/big"
|
|
||||||
|
|
||||||
. "github.com/onsi/ginkgo"
|
|
||||||
. "github.com/onsi/gomega"
|
|
||||||
"github.com/vulcanize/vulcanizedb/pkg/contract_summary"
|
|
||||||
"github.com/vulcanize/vulcanizedb/pkg/core"
|
|
||||||
"github.com/vulcanize/vulcanizedb/pkg/datastore"
|
|
||||||
"github.com/vulcanize/vulcanizedb/pkg/datastore/inmemory"
|
|
||||||
"github.com/vulcanize/vulcanizedb/pkg/fakes"
|
|
||||||
)
|
|
||||||
|
|
||||||
func NewCurrentContractSummary(blockchain core.Blockchain, contractRepository datastore.ContractRepository, contractHash string) (contract_summary.ContractSummary, error) {
|
|
||||||
return contract_summary.NewSummary(blockchain, contractRepository, contractHash, nil)
|
|
||||||
}
|
|
||||||
|
|
||||||
var _ = Describe("The contract summary", func() {
|
|
||||||
|
|
||||||
var inMemoryDB *inmemory.InMemory
|
|
||||||
var contractRepostiory *inmemory.ContractRepostiory
|
|
||||||
|
|
||||||
BeforeEach(func() {
|
|
||||||
inMemoryDB = inmemory.NewInMemory()
|
|
||||||
contractRepostiory = &inmemory.ContractRepostiory{InMemory: inMemoryDB}
|
|
||||||
|
|
||||||
})
|
|
||||||
|
|
||||||
Context("when the given contract does not exist", func() {
|
|
||||||
It("returns an error", func() {
|
|
||||||
blockchain := fakes.NewBlockchain()
|
|
||||||
|
|
||||||
contractSummary, err := NewCurrentContractSummary(blockchain, contractRepostiory, "0x123")
|
|
||||||
|
|
||||||
Expect(contractSummary).To(Equal(contract_summary.ContractSummary{}))
|
|
||||||
Expect(err).NotTo(BeNil())
|
|
||||||
})
|
|
||||||
})
|
|
||||||
|
|
||||||
Context("when the given contract exists", func() {
|
|
||||||
It("returns the summary", func() {
|
|
||||||
contract := core.Contract{Hash: "0x123"}
|
|
||||||
contractRepostiory.CreateContract(contract)
|
|
||||||
blockchain := fakes.NewBlockchain()
|
|
||||||
|
|
||||||
contractSummary, err := NewCurrentContractSummary(blockchain, contractRepostiory, "0x123")
|
|
||||||
|
|
||||||
Expect(contractSummary).NotTo(Equal(contract_summary.ContractSummary{}))
|
|
||||||
Expect(err).To(BeNil())
|
|
||||||
})
|
|
||||||
|
|
||||||
It("includes the contract hash in the summary", func() {
|
|
||||||
contract := core.Contract{Hash: "0x123"}
|
|
||||||
contractRepostiory.CreateContract(contract)
|
|
||||||
blockchain := fakes.NewBlockchain()
|
|
||||||
|
|
||||||
contractSummary, _ := NewCurrentContractSummary(blockchain, contractRepostiory, "0x123")
|
|
||||||
|
|
||||||
Expect(contractSummary.ContractHash).To(Equal("0x123"))
|
|
||||||
})
|
|
||||||
|
|
||||||
It("sets the number of transactions", func() {
|
|
||||||
blocks := &inmemory.BlockRepository{InMemory: inMemoryDB}
|
|
||||||
blockchain := fakes.NewBlockchain()
|
|
||||||
|
|
||||||
contract := core.Contract{Hash: "0x123"}
|
|
||||||
contractRepostiory.CreateContract(contract)
|
|
||||||
block := core.Block{
|
|
||||||
Transactions: []core.Transaction{
|
|
||||||
{To: "0x123"},
|
|
||||||
{To: "0x123"},
|
|
||||||
},
|
|
||||||
}
|
|
||||||
blocks.CreateOrUpdateBlock(block)
|
|
||||||
|
|
||||||
contractSummary, _ := NewCurrentContractSummary(blockchain, contractRepostiory, "0x123")
|
|
||||||
|
|
||||||
Expect(contractSummary.NumberOfTransactions).To(Equal(2))
|
|
||||||
})
|
|
||||||
|
|
||||||
It("sets the last transaction", func() {
|
|
||||||
blocks := &inmemory.BlockRepository{InMemory: inMemoryDB}
|
|
||||||
blockchain := fakes.NewBlockchain()
|
|
||||||
|
|
||||||
contract := core.Contract{Hash: "0x123"}
|
|
||||||
contractRepostiory.CreateContract(contract)
|
|
||||||
block := core.Block{
|
|
||||||
Transactions: []core.Transaction{
|
|
||||||
{Hash: "TRANSACTION2", To: "0x123"},
|
|
||||||
{Hash: "TRANSACTION1", To: "0x123"},
|
|
||||||
},
|
|
||||||
}
|
|
||||||
blocks.CreateOrUpdateBlock(block)
|
|
||||||
|
|
||||||
contractSummary, _ := NewCurrentContractSummary(blockchain, contractRepostiory, "0x123")
|
|
||||||
|
|
||||||
Expect(contractSummary.LastTransaction.Hash).To(Equal("TRANSACTION2"))
|
|
||||||
})
|
|
||||||
|
|
||||||
It("gets contract state attribute for the contract from the blockchain", func() {
|
|
||||||
blockchain := fakes.NewBlockchain()
|
|
||||||
|
|
||||||
contract := core.Contract{Hash: "0x123"}
|
|
||||||
contractRepostiory.CreateContract(contract)
|
|
||||||
blockchain.SetContractStateAttribute("0x123", nil, "foo", "bar")
|
|
||||||
|
|
||||||
contractSummary, _ := NewCurrentContractSummary(blockchain, contractRepostiory, "0x123")
|
|
||||||
attribute := contractSummary.GetStateAttribute("foo")
|
|
||||||
|
|
||||||
Expect(attribute).To(Equal("bar"))
|
|
||||||
})
|
|
||||||
|
|
||||||
It("gets contract state attribute for the contract from the blockchain at specific block height", func() {
|
|
||||||
blockchain := fakes.NewBlockchain()
|
|
||||||
|
|
||||||
contract := core.Contract{Hash: "0x123"}
|
|
||||||
contractRepostiory.CreateContract(contract)
|
|
||||||
blockNumber := big.NewInt(1000)
|
|
||||||
blockchain.SetContractStateAttribute("0x123", nil, "foo", "bar")
|
|
||||||
blockchain.SetContractStateAttribute("0x123", blockNumber, "foo", "baz")
|
|
||||||
|
|
||||||
contractSummary, _ := contract_summary.NewSummary(blockchain, contractRepostiory, "0x123", blockNumber)
|
|
||||||
attribute := contractSummary.GetStateAttribute("foo")
|
|
||||||
|
|
||||||
Expect(attribute).To(Equal("baz"))
|
|
||||||
})
|
|
||||||
|
|
||||||
It("gets attributes for the contract from the blockchain", func() {
|
|
||||||
blockchain := fakes.NewBlockchain()
|
|
||||||
|
|
||||||
contract := core.Contract{Hash: "0x123"}
|
|
||||||
contractRepostiory.CreateContract(contract)
|
|
||||||
blockchain.SetContractStateAttribute("0x123", nil, "foo", "bar")
|
|
||||||
blockchain.SetContractStateAttribute("0x123", nil, "baz", "bar")
|
|
||||||
|
|
||||||
contractSummary, _ := NewCurrentContractSummary(blockchain, contractRepostiory, "0x123")
|
|
||||||
|
|
||||||
Expect(contractSummary.Attributes).To(Equal(
|
|
||||||
core.ContractAttributes{
|
|
||||||
{Name: "baz", Type: "string"},
|
|
||||||
{Name: "foo", Type: "string"},
|
|
||||||
},
|
|
||||||
))
|
|
||||||
})
|
|
||||||
|
|
||||||
})
|
|
||||||
|
|
||||||
})
|
|
@ -3,8 +3,7 @@ package core
|
|||||||
import "math/big"
|
import "math/big"
|
||||||
|
|
||||||
type Blockchain interface {
|
type Blockchain interface {
|
||||||
GetAttribute(contract Contract, attributeName string, blockNumber *big.Int) (interface{}, error)
|
ContractDataFetcher
|
||||||
GetAttributes(contract Contract) (ContractAttributes, error)
|
|
||||||
GetBlockByNumber(blockNumber int64) Block
|
GetBlockByNumber(blockNumber int64) Block
|
||||||
GetLogs(contract Contract, startingBlockNumber *big.Int, endingBlockNumber *big.Int) ([]Log, error)
|
GetLogs(contract Contract, startingBlockNumber *big.Int, endingBlockNumber *big.Int) ([]Log, error)
|
||||||
LastBlock() *big.Int
|
LastBlock() *big.Int
|
||||||
|
@ -1,20 +0,0 @@
|
|||||||
package core
|
|
||||||
|
|
||||||
type ContractAttribute struct {
|
|
||||||
Name string
|
|
||||||
Type string
|
|
||||||
}
|
|
||||||
|
|
||||||
type ContractAttributes []ContractAttribute
|
|
||||||
|
|
||||||
func (attributes ContractAttributes) Len() int {
|
|
||||||
return len(attributes)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (attributes ContractAttributes) Swap(i, j int) {
|
|
||||||
attributes[i], attributes[j] = attributes[j], attributes[i]
|
|
||||||
}
|
|
||||||
|
|
||||||
func (attributes ContractAttributes) Less(i, j int) bool {
|
|
||||||
return attributes[i].Name < attributes[j].Name
|
|
||||||
}
|
|
@ -1,8 +1,6 @@
|
|||||||
package fakes
|
package fakes
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"sort"
|
|
||||||
|
|
||||||
"math/big"
|
"math/big"
|
||||||
|
|
||||||
"github.com/vulcanize/vulcanizedb/pkg/core"
|
"github.com/vulcanize/vulcanizedb/pkg/core"
|
||||||
@ -18,6 +16,10 @@ type Blockchain struct {
|
|||||||
ContractReturnValue []byte
|
ContractReturnValue []byte
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (blockchain *Blockchain) FetchContractData(abiJSON string, address string, method string, methodArg interface{}, result interface{}, blockNumber int64) error {
|
||||||
|
panic("implement me")
|
||||||
|
}
|
||||||
|
|
||||||
func (blockchain *Blockchain) CallContract(contractHash string, input []byte, blockNumber *big.Int) ([]byte, error) {
|
func (blockchain *Blockchain) CallContract(contractHash string, input []byte, blockNumber *big.Int) ([]byte, error) {
|
||||||
return blockchain.ContractReturnValue, nil
|
return blockchain.ContractReturnValue, nil
|
||||||
}
|
}
|
||||||
@ -40,16 +42,6 @@ func (blockchain *Blockchain) Node() core.Node {
|
|||||||
return blockchain.node
|
return blockchain.node
|
||||||
}
|
}
|
||||||
|
|
||||||
func (blockchain *Blockchain) GetAttribute(contract core.Contract, attributeName string, blockNumber *big.Int) (interface{}, error) {
|
|
||||||
var result interface{}
|
|
||||||
if blockNumber == nil {
|
|
||||||
result = blockchain.contractAttributes[contract.Hash+"-1"][attributeName]
|
|
||||||
} else {
|
|
||||||
result = blockchain.contractAttributes[contract.Hash+blockNumber.String()][attributeName]
|
|
||||||
}
|
|
||||||
return result, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func NewBlockchain() *Blockchain {
|
func NewBlockchain() *Blockchain {
|
||||||
return &Blockchain{
|
return &Blockchain{
|
||||||
blocks: make(map[int64]core.Block),
|
blocks: make(map[int64]core.Block),
|
||||||
@ -77,29 +69,3 @@ func (blockchain *Blockchain) AddBlock(block core.Block) {
|
|||||||
blockchain.blocks[block.Number] = block
|
blockchain.blocks[block.Number] = block
|
||||||
blockchain.blocksChannel <- block
|
blockchain.blocksChannel <- block
|
||||||
}
|
}
|
||||||
|
|
||||||
func (blockchain *Blockchain) SetContractStateAttribute(contractHash string, blockNumber *big.Int, attributeName string, attributeValue string) {
|
|
||||||
var key string
|
|
||||||
if blockNumber == nil {
|
|
||||||
key = contractHash + "-1"
|
|
||||||
} else {
|
|
||||||
key = contractHash + blockNumber.String()
|
|
||||||
}
|
|
||||||
contractStateAttributes := blockchain.contractAttributes[key]
|
|
||||||
if contractStateAttributes == nil {
|
|
||||||
blockchain.contractAttributes[key] = make(map[string]string)
|
|
||||||
}
|
|
||||||
blockchain.contractAttributes[key][attributeName] = attributeValue
|
|
||||||
}
|
|
||||||
|
|
||||||
func (blockchain *Blockchain) GetAttributes(contract core.Contract) (core.ContractAttributes, error) {
|
|
||||||
var contractAttributes core.ContractAttributes
|
|
||||||
attributes, ok := blockchain.contractAttributes[contract.Hash+"-1"]
|
|
||||||
if ok {
|
|
||||||
for key := range attributes {
|
|
||||||
contractAttributes = append(contractAttributes, core.ContractAttribute{Name: key, Type: "string"})
|
|
||||||
}
|
|
||||||
}
|
|
||||||
sort.Sort(contractAttributes)
|
|
||||||
return contractAttributes, nil
|
|
||||||
}
|
|
||||||
|
@ -3,41 +3,17 @@ package geth
|
|||||||
import (
|
import (
|
||||||
"errors"
|
"errors"
|
||||||
|
|
||||||
"sort"
|
|
||||||
|
|
||||||
"context"
|
"context"
|
||||||
"math/big"
|
"math/big"
|
||||||
|
|
||||||
"github.com/ethereum/go-ethereum"
|
"github.com/ethereum/go-ethereum"
|
||||||
"github.com/ethereum/go-ethereum/common"
|
"github.com/ethereum/go-ethereum/common"
|
||||||
"github.com/vulcanize/vulcanizedb/pkg/core"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
ErrInvalidStateAttribute = errors.New("invalid state attribute")
|
ErrInvalidStateAttribute = errors.New("invalid state attribute")
|
||||||
)
|
)
|
||||||
|
|
||||||
func (blockchain *Blockchain) GetAttribute(contract core.Contract, attributeName string, blockNumber *big.Int) (interface{}, error) {
|
|
||||||
parsed, err := ParseAbi(contract.Abi)
|
|
||||||
var result interface{}
|
|
||||||
if err != nil {
|
|
||||||
return result, err
|
|
||||||
}
|
|
||||||
input, err := parsed.Pack(attributeName)
|
|
||||||
if err != nil {
|
|
||||||
return nil, ErrInvalidStateAttribute
|
|
||||||
}
|
|
||||||
output, err := blockchain.callContract(contract.Hash, input, blockNumber)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
err = parsed.Unpack(&result, attributeName, output)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
return result, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (blockchain *Blockchain) FetchContractData(abiJSON string, address string, method string, methodArg interface{}, result interface{}, blockNumber int64) error {
|
func (blockchain *Blockchain) FetchContractData(abiJSON string, address string, method string, methodArg interface{}, result interface{}, blockNumber int64) error {
|
||||||
parsed, err := ParseAbi(abiJSON)
|
parsed, err := ParseAbi(abiJSON)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -59,16 +35,3 @@ func (blockchain *Blockchain) callContract(contractHash string, input []byte, bl
|
|||||||
msg := ethereum.CallMsg{To: &to, Data: input}
|
msg := ethereum.CallMsg{To: &to, Data: input}
|
||||||
return blockchain.client.CallContract(context.Background(), msg, blockNumber)
|
return blockchain.client.CallContract(context.Background(), msg, blockNumber)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (blockchain *Blockchain) GetAttributes(contract core.Contract) (core.ContractAttributes, error) {
|
|
||||||
parsed, _ := ParseAbi(contract.Abi)
|
|
||||||
var contractAttributes core.ContractAttributes
|
|
||||||
for _, abiElement := range parsed.Methods {
|
|
||||||
if (len(abiElement.Outputs) > 0) && (len(abiElement.Inputs) == 0) && abiElement.Const {
|
|
||||||
attributeType := abiElement.Outputs[0].Type.String()
|
|
||||||
contractAttributes = append(contractAttributes, core.ContractAttribute{Name: abiElement.Name, Type: attributeType})
|
|
||||||
}
|
|
||||||
}
|
|
||||||
sort.Sort(contractAttributes)
|
|
||||||
return contractAttributes, nil
|
|
||||||
}
|
|
||||||
|
@ -8,15 +8,6 @@ import (
|
|||||||
"github.com/vulcanize/vulcanizedb/test_config"
|
"github.com/vulcanize/vulcanizedb/test_config"
|
||||||
)
|
)
|
||||||
|
|
||||||
func FindAttribute(contractAttributes core.ContractAttributes, attributeName string) *core.ContractAttribute {
|
|
||||||
for _, contractAttribute := range contractAttributes {
|
|
||||||
if contractAttribute.Name == attributeName {
|
|
||||||
return &contractAttribute
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func SampleContract() core.Contract {
|
func SampleContract() core.Contract {
|
||||||
return core.Contract{
|
return core.Contract{
|
||||||
Abi: sampleAbiFileContents(),
|
Abi: sampleAbiFileContents(),
|
||||||
|
Loading…
Reference in New Issue
Block a user