Get ABI via etherscan API (#96)
- Added ABI request - Add unique constraint on contract hash for watched contracts
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user