创建以太坊合约(去以太坊)
Posted
技术标签:
【中文标题】创建以太坊合约(去以太坊)【英文标题】:Creating Ethereum Contracts (go ethereum) 【发布时间】:2016-02-28 21:23:57 【问题描述】:尝试按照 go ethereum 的 wiki 示例创建基本合约: https://github.com/ethereum/go-ethereum/wiki/Contracts-and-Transactions
直到最后一行,一切似乎都正常工作:
source = "contract test function multiply(uint a) returns(uint d) return a * 7; "
contract = eth.compile.solidity(source).test
primaryAddress = eth.accounts[0]
# **Problems start here **
MyContract = eth.contract(abi);
contact = MyContract.new(arg1, arg2, ...,from: primaryAddress, data: evmCode)
eth.contract 方法的“abi”参数是什么?另外,我会在“evmCode”参数中添加什么?在这个特定的示例中,似乎我会为“arg1”输入一个整数,但不确定完整示例应该是什么样子。
【问题讨论】:
【参考方案1】:ABI 是您的合约公开的接口。 “evmCode”是您合约的以太坊字节码。
要解决您的问题,请转至https://chriseth.github.io/browser-solidity/ 并插入您的 Solidity。右侧的 Bytecode 字段将为您提供“evmCode”的值,而 Interface 将为您提供 ABI。
您还可以从“Web3 deploy”中复制 sn-p 并将其粘贴到您的代码中以部署您的合约。
【讨论】:
谢谢。你的建议奏效了。然而,当我今天学习 EVM 时,我注意到命令行solidity 编译器实际上在编译时会为您提供“evmCode”;只是教程没有说明编译时ABI是输出到命令行的。当我阅读 EVM 文档时,我立即想到了您对空灵字节码的评论并建立了联系。 啊,我明白了。我没有意识到教程的一部分涉及使用 solc。很高兴您已经启动并运行。【参考方案2】:ABI 基本上是面向公众的接口,显示可以调用的方法。 获取 abi 的最简单方法是使用 https://remix.ethereum.org 。只需粘贴您的代码和合同选项卡在列的底部,您会找到一个链接,上面写着合同详细信息,基本上是 ABI json
反过来你也可以使用web3的contracts.Introduction.interface
api来获取abi。
【讨论】:
【参考方案3】:您可以尝试使用 Etherlime shape 或 Truffle box 之类的工具来将整个示例项目包含在 js 中的合同、测试和使用情况。从这里你可以开始前进。
【讨论】:
【参考方案4】:ABI 是应用程序二进制接口。由solidity编译器编译的合约返回一个具有不同方法的对象。 ABI 和 Bytecode 基本都是用到的方法。 ABI 用于与您的合约和前端交互(如果使用节点),字节码用于部署到 Rinkeby(或任何以太坊网络)。
例如:合同是:
pragma solidity ^0.4.17;
contract Inbox
string public message;
function Inbox(string initialMessage) public
message = initialMessage;
function setMessage(string newMessage) public
message = newMessage;
它的 ABI 是:
interface:
[
"constant":false,"inputs":[
"name":"newMessage","type":"string"
]
,"name":"setMessage","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"
,
"constant":true,"inputs":[],"name":"message","outputs":[
"name":"","type":"string"
]
,"payable":false,"stateMutability":"view","type":"function"
,
"inputs":[
"name":"initialMessage","type":"string"
]
,"payable":false,"stateMutability":"nonpayable","type":"constructor"
]
这是编译合约后返回的。你可以看到它由我们合约中使用的方法组成。
【讨论】:
【参考方案5】:ABI 是可以使用 java 脚本读取的智能合约的表示。要从 etherum 中已部署的合约账户读取数据,您需要一些额外的详细信息,例如 abi。
获取任何智能合约的 abi 的步骤:
1.每个合约都有这样的合约哈希地址:0x0D8775F648430679A709E98d2b0Cb6250d2887EF
2.去etherscan.io,在搜索栏搜索你的合约地址hash,你就会得到合约。
3.在合同中转到代码,在那里你可以找到这个 abi
can check this link to find abi
【讨论】:
以上是关于创建以太坊合约(去以太坊)的主要内容,如果未能解决你的问题,请参考以下文章