Fatal: Failed to generate ABI binding: duplicated identifier "XX_X"(normalized "XXX"), use --alias for renaming
遇到这种情况一般是合约里的函数名出现_符号。而在abigen在解析abi文件生成.go文件的时候会要求去掉"_"这个符号.我们这时可以使用重命名的方式来执行编译
abigen --abi XXX.abi --pkg XXX --out XXX.go --alias XX_X =XXX
加上--alias 选项更改掉提示的名字
#通过abigen生成go文件示例
abigen -sol pdbank.sol -pkg Pdbank -out Pdbank.go
如果提示
Fatal: Failed to build Solidity contract: exec: "solc": executable file not found in $PATH
sudo add-apt-repository ppa:ethereum/ethereum
sudo apt-get update
sudo apt-get install solc
solc --abi Store.sol
它会将其写入名为“Store_sol_Store.abi”的文件中
现在让我们用abigen
将ABI转换为我们可以导入的Go文件。 这个新文件将包含我们可以用来与Go应用程序中的智能合约进行交互的所有可用方法。
abigen --abi=Store_sol_Store.abi --pkg=store --out=Store.go
为了从Go部署智能合约,我们还需要将solidity智能合约编译为EVM字节码。 EVM字节码将在事务的数据字段中发送。 在Go文件上生成部署方法需要bin文件。
solc --bin Store.sol
现在我们编译Go合约文件,其中包括deploy方法,因为我们包含了bin文件。
abigen --bin=Store_sol_Store.bin --abi=Store_sol_Store.abi --pkg=store --out=Store.go
solc直接生成go文件示例
solc game.sol --combined-json abi,bin | abigen --pkg game --type storage --out game.go --combined-json -
如果使用solc进行编译的情况下提示版本不对可以直接用代码丢到remix里面生成abi。然后使用abigen生成对应的go文件