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()
|
StartListening()
|
||||||
StopListening()
|
StopListening()
|
||||||
GetContractAttributes(contractHash string) (ContractAttributes, error)
|
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
|
package fakes
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"github.com/8thlight/vulcanizedb/pkg/core"
|
|
||||||
"sort"
|
"sort"
|
||||||
|
|
||||||
|
"github.com/8thlight/vulcanizedb/pkg/core"
|
||||||
)
|
)
|
||||||
|
|
||||||
type Blockchain struct {
|
type Blockchain struct {
|
||||||
@ -24,9 +25,8 @@ func (blockchain *Blockchain) GetContractAttributes(contractHash string) (core.C
|
|||||||
return contractAttributes, nil
|
return contractAttributes, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (blockchain *Blockchain) GetContractStateAttribute(contractHash string, attributeName string) (*string, error) {
|
func (blockchain *Blockchain) GetContractStateAttribute(contractHash string, attributeName string) (interface{}, error) {
|
||||||
result := new(string)
|
result := blockchain.contractAttributes[contractHash][attributeName]
|
||||||
*result = blockchain.contractAttributes[contractHash][attributeName]
|
|
||||||
return result, nil
|
return result, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -22,7 +22,7 @@ func (blockchain *GethBlockchain) GetContractAttributes(contractHash string) (co
|
|||||||
parsed, _ := ParseAbiFile(abiFilePath)
|
parsed, _ := ParseAbiFile(abiFilePath)
|
||||||
var contractAttributes core.ContractAttributes
|
var contractAttributes core.ContractAttributes
|
||||||
for _, abiElement := range parsed.Methods {
|
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()
|
attributeType := abiElement.Outputs[0].Type.String()
|
||||||
contractAttributes = append(contractAttributes, core.ContractAttribute{abiElement.Name, attributeType})
|
contractAttributes = append(contractAttributes, core.ContractAttribute{abiElement.Name, attributeType})
|
||||||
}
|
}
|
||||||
@ -31,13 +31,13 @@ func (blockchain *GethBlockchain) GetContractAttributes(contractHash string) (co
|
|||||||
return contractAttributes, nil
|
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)
|
boundContract, err := bindContract(common.HexToAddress(contractHash), blockchain.client, blockchain.client)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
result := new(string)
|
var result interface{}
|
||||||
err = boundContract.Call(&bind.CallOpts{}, result, attributeName)
|
err = boundContract.Call(&bind.CallOpts{}, &result, attributeName)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, ErrInvalidStateAttribute
|
return nil, ErrInvalidStateAttribute
|
||||||
}
|
}
|
||||||
|
@ -48,18 +48,6 @@ package geth_test
|
|||||||
// attribute := testing.FindAttribute(attributes, "unpause")
|
// attribute := testing.FindAttribute(attributes, "unpause")
|
||||||
// Expect(attribute).To(BeNil())
|
// 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() {
|
// Describe("Getting a contract attribute", func() {
|
||||||
@ -70,7 +58,7 @@ package geth_test
|
|||||||
//
|
//
|
||||||
// name, err := blockchain.GetContractStateAttribute(contractHash, "name")
|
// name, err := blockchain.GetContractStateAttribute(contractHash, "name")
|
||||||
//
|
//
|
||||||
// Expect(*name).To(Equal("OMGToken"))
|
// Expect(name).To(Equal("OMGToken"))
|
||||||
// Expect(err).To(BeNil())
|
// Expect(err).To(BeNil())
|
||||||
// })
|
// })
|
||||||
//
|
//
|
||||||
|
@ -4,6 +4,7 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
|
|
||||||
"github.com/8thlight/vulcanizedb/pkg/core"
|
"github.com/8thlight/vulcanizedb/pkg/core"
|
||||||
|
"github.com/ethereum/go-ethereum/common"
|
||||||
)
|
)
|
||||||
|
|
||||||
func GenerateConsoleOutput(summary *ContractSummary) string {
|
func GenerateConsoleOutput(summary *ContractSummary) string {
|
||||||
@ -45,6 +46,16 @@ func attributesString(summary *ContractSummary) string {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func formatAttribute(attributeName string, summary *ContractSummary) string {
|
func formatAttribute(attributeName string, summary *ContractSummary) string {
|
||||||
formattedAttribute := fmt.Sprintf("%s: %s", attributeName, summary.GetStateAttribute(attributeName))
|
var stringResult string
|
||||||
return formattedAttribute
|
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)
|
result, _ := contractSummary.blockChain.GetContractStateAttribute(contractSummary.ContractHash, attributeName)
|
||||||
return *result
|
return result
|
||||||
}
|
}
|
||||||
|
|
||||||
func newContractSummary(blockchain core.Blockchain, watchedContract core.WatchedContract) *ContractSummary {
|
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")
|
blockchain.SetContractStateAttribute("0x123", "foo", "bar")
|
||||||
|
|
||||||
contractSummary, _ := watched_contracts.NewSummary(blockchain, repository, "0x123")
|
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() {
|
It("gets attributes for the contract from the blockchain", func() {
|
||||||
|
Loading…
Reference in New Issue
Block a user