Get ABI via etherscan API (#96)

- Added ABI request
- Add unique constraint on contract hash for watched contracts
This commit is contained in:
Matt K
2017-12-07 09:58:06 -06:00
committed by GitHub
parent f496303f15
commit 18163f970e
13 changed files with 213 additions and 108 deletions
+3 -1
View File
@@ -12,10 +12,12 @@ func main() {
contractHash := flag.String("contract-hash", "", "contract-hash=x1234")
abiFilepath := flag.String("abi-filepath", "", "path/to/abifile.json")
flag.Parse()
contractAbiString := cmd.GetAbi(*abiFilepath, *contractHash)
config := cmd.LoadConfig(*environment)
repository := cmd.LoadPostgres(config.Database)
watchedContract := core.Contract{
Abi: cmd.ReadAbiFile(*abiFilepath),
Abi: contractAbiString,
Hash: *contractHash,
}
repository.CreateContract(watchedContract)
+18
View File
@@ -5,6 +5,8 @@ import (
"path/filepath"
"fmt"
"github.com/8thlight/vulcanizedb/pkg/config"
"github.com/8thlight/vulcanizedb/pkg/geth"
"github.com/8thlight/vulcanizedb/pkg/repositories"
@@ -36,3 +38,19 @@ func ReadAbiFile(abiFilepath string) string {
}
return abi
}
func GetAbi(abiFilepath string, contractHash string) string {
var contractAbiString string
if abiFilepath != "" {
contractAbiString = ReadAbiFile(abiFilepath)
} else {
etherscan := geth.NewEtherScanClient("https://api.etherscan.io")
fmt.Println("No ABI supplied. Retrieving ABI from Etherscan")
contractAbiString, _ = etherscan.GetAbi(contractHash)
}
_, err := geth.ParseAbi(contractAbiString)
if err != nil {
log.Fatalln("Invalid ABI")
}
return contractAbiString
}