forked from cerc-io/ipld-eth-server
Merge pull request #82 from 8thlight/add-contract-types
Add contract types
This commit is contained in:
commit
437e052bbb
@ -6,5 +6,5 @@ type Blockchain interface {
|
||||
StartListening()
|
||||
StopListening()
|
||||
GetContractAttributes(contractHash string) (ContractAttributes, error)
|
||||
GetContractStateAttribute(contractHash string, attributeName string) (*string, error)
|
||||
GetContractStateAttribute(contractHash string, attributeName string) (interface{}, error)
|
||||
}
|
||||
|
@ -1,8 +1,9 @@
|
||||
package fakes
|
||||
|
||||
import (
|
||||
"github.com/8thlight/vulcanizedb/pkg/core"
|
||||
"sort"
|
||||
|
||||
"github.com/8thlight/vulcanizedb/pkg/core"
|
||||
)
|
||||
|
||||
type Blockchain struct {
|
||||
@ -24,9 +25,8 @@ func (blockchain *Blockchain) GetContractAttributes(contractHash string) (core.C
|
||||
return contractAttributes, nil
|
||||
}
|
||||
|
||||
func (blockchain *Blockchain) GetContractStateAttribute(contractHash string, attributeName string) (*string, error) {
|
||||
result := new(string)
|
||||
*result = blockchain.contractAttributes[contractHash][attributeName]
|
||||
func (blockchain *Blockchain) GetContractStateAttribute(contractHash string, attributeName string) (interface{}, error) {
|
||||
result := blockchain.contractAttributes[contractHash][attributeName]
|
||||
return result, nil
|
||||
}
|
||||
|
||||
|
@ -22,7 +22,7 @@ func (blockchain *GethBlockchain) GetContractAttributes(contractHash string) (co
|
||||
parsed, _ := ParseAbiFile(abiFilePath)
|
||||
var contractAttributes core.ContractAttributes
|
||||
for _, abiElement := range parsed.Methods {
|
||||
if (len(abiElement.Outputs) > 0) && (len(abiElement.Inputs) == 0) && abiElement.Const && abiElement.Outputs[0].Type.String() == "string" {
|
||||
if (len(abiElement.Outputs) > 0) && (len(abiElement.Inputs) == 0) && abiElement.Const {
|
||||
attributeType := abiElement.Outputs[0].Type.String()
|
||||
contractAttributes = append(contractAttributes, core.ContractAttribute{abiElement.Name, attributeType})
|
||||
}
|
||||
@ -31,13 +31,13 @@ func (blockchain *GethBlockchain) GetContractAttributes(contractHash string) (co
|
||||
return contractAttributes, nil
|
||||
}
|
||||
|
||||
func (blockchain *GethBlockchain) GetContractStateAttribute(contractHash string, attributeName string) (*string, error) {
|
||||
func (blockchain *GethBlockchain) GetContractStateAttribute(contractHash string, attributeName string) (interface{}, error) {
|
||||
boundContract, err := bindContract(common.HexToAddress(contractHash), blockchain.client, blockchain.client)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
result := new(string)
|
||||
err = boundContract.Call(&bind.CallOpts{}, result, attributeName)
|
||||
var result interface{}
|
||||
err = boundContract.Call(&bind.CallOpts{}, &result, attributeName)
|
||||
if err != nil {
|
||||
return nil, ErrInvalidStateAttribute
|
||||
}
|
||||
|
@ -48,18 +48,6 @@ package geth_test
|
||||
// attribute := testing.FindAttribute(attributes, "unpause")
|
||||
// Expect(attribute).To(BeNil())
|
||||
// })
|
||||
//
|
||||
// It("temporarily filters out non-string attributes", func() {
|
||||
// config, _ := cfg.NewConfig("public")
|
||||
// blockchain := geth.NewGethBlockchain(config.Client.IPCPath)
|
||||
// contractHash := "0xd26114cd6EE289AccF82350c8d8487fedB8A0C07"
|
||||
//
|
||||
// attributes, err := blockchain.GetContractAttributes(contractHash)
|
||||
//
|
||||
// Expect(err).To(BeNil())
|
||||
// attribute := testing.FindAttribute(attributes, "decimals")
|
||||
// Expect(attribute).To(BeNil())
|
||||
// })
|
||||
// })
|
||||
//
|
||||
// Describe("Getting a contract attribute", func() {
|
||||
@ -70,7 +58,7 @@ package geth_test
|
||||
//
|
||||
// name, err := blockchain.GetContractStateAttribute(contractHash, "name")
|
||||
//
|
||||
// Expect(*name).To(Equal("OMGToken"))
|
||||
// Expect(name).To(Equal("OMGToken"))
|
||||
// Expect(err).To(BeNil())
|
||||
// })
|
||||
//
|
||||
|
@ -4,6 +4,7 @@ import (
|
||||
"fmt"
|
||||
|
||||
"github.com/8thlight/vulcanizedb/pkg/core"
|
||||
"github.com/ethereum/go-ethereum/common"
|
||||
)
|
||||
|
||||
func GenerateConsoleOutput(summary *ContractSummary) string {
|
||||
@ -45,6 +46,16 @@ func attributesString(summary *ContractSummary) string {
|
||||
}
|
||||
|
||||
func formatAttribute(attributeName string, summary *ContractSummary) string {
|
||||
formattedAttribute := fmt.Sprintf("%s: %s", attributeName, summary.GetStateAttribute(attributeName))
|
||||
return formattedAttribute
|
||||
var stringResult string
|
||||
result := summary.GetStateAttribute(attributeName)
|
||||
fmt.Println(fmt.Sprintf("%s: %v (%T)", attributeName, result, result))
|
||||
switch t := result.(type) {
|
||||
case common.Address:
|
||||
ca := result.(common.Address)
|
||||
stringResult = fmt.Sprintf("%v", ca.Hex())
|
||||
default:
|
||||
_ = t
|
||||
stringResult = fmt.Sprintf("%v", result)
|
||||
}
|
||||
return stringResult
|
||||
}
|
||||
|
@ -29,9 +29,9 @@ func NewSummary(blockchain core.Blockchain, repository repositories.Repository,
|
||||
}
|
||||
}
|
||||
|
||||
func (contractSummary ContractSummary) GetStateAttribute(attributeName string) string {
|
||||
func (contractSummary ContractSummary) GetStateAttribute(attributeName string) interface{} {
|
||||
result, _ := contractSummary.blockChain.GetContractStateAttribute(contractSummary.ContractHash, attributeName)
|
||||
return *result
|
||||
return result
|
||||
}
|
||||
|
||||
func newContractSummary(blockchain core.Blockchain, watchedContract core.WatchedContract) *ContractSummary {
|
||||
|
@ -91,8 +91,9 @@ var _ bool = Describe("The watched contract summary", func() {
|
||||
blockchain.SetContractStateAttribute("0x123", "foo", "bar")
|
||||
|
||||
contractSummary, _ := watched_contracts.NewSummary(blockchain, repository, "0x123")
|
||||
attribute := contractSummary.GetStateAttribute("foo")
|
||||
|
||||
Expect(contractSummary.GetStateAttribute("foo")).To(Equal("bar"))
|
||||
Expect(attribute).To(Equal("bar"))
|
||||
})
|
||||
|
||||
It("gets attributes for the contract from the blockchain", func() {
|
||||
|
Loading…
Reference in New Issue
Block a user