创建以太坊合同(go Ethereum)

创建以太坊合同(go Ethereum),ethereum,Ethereum,尝试按照go ethereum的wiki示例创建基本合同: 在我下到最后一行之前,一切似乎都正常: 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 ** MyCo

尝试按照go ethereum的wiki示例创建基本合同:

在我下到最后一行之前,一切似乎都正常:

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”输入一个整数,但不确定完整的示例应该是什么样子

ABI是合同公开的接口。“evmCode”是合同的以太坊字节码

要解决您的问题,请转到并插入您的Solidity。右边的字节码字段将为您提供“evmCode”的值,接口将为您提供ABI


您还可以从“Web3deploy”中复制代码段,并将其粘贴到代码中以部署合同

ABI基本上是一个面向公众的接口,它显示了可以调用哪些方法。 获取abi的最简单方法是使用。只需将代码粘贴到该列底部的Contract选项卡中,您就会发现一个显示Contract details的链接,基本上就是ABI json


相反,您也可以使用web3的
contracts.Introduction.interface
api来获取abi。

您可以尝试使用诸如或Truffle box之类的工具,在js中创建一个包含合同、测试和用法的完整示例项目。您可以从这里开始前进。

ABI是应用程序二进制接口。由solidity编译器编译时,契约返回具有不同方法的对象。ABI和字节码基本上是使用的方法。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"
 }]

这是在编写合同后返回的。你可以看到它包含了我们合同中使用的方法。

以太坊有一些很棒的工具,你可以用来测试区块链。如上所述,remix对defi非常有用,实际上ABI是智能合约的表示,可以使用java脚本读取。要从etherum中部署的合约帐户读取数据,您需要一些额外的细节,如ABI

获取任何智能合约abi的步骤:

pragma solidity ^0.4.17;

contract Inbox
{

    string public message;

    function Inbox(string initialMessage) public{
        message = initialMessage;
    }

    function setMessage(string newMessage) public{
        message = newMessage;
    }
}
1.每个合同都有如下合同哈希地址:0x0D8775F648430679A709E98d2b0Cb6250d2887EF

2.转到etherscan.io并在搜索栏中搜索您的合同地址哈希,您将获得合同

3.在合同中,转到代码,您可以在那里找到此abi


谢谢。你的建议奏效了。然而,当我今天学习EVM时,我注意到命令行solidity编译器实际上在编译时为您提供了“evmCode”;只是教程没有解释编译时ABI输出到命令行。当我阅读EVM文档时,我立即想到了你对ethereal字节码的评论,并建立了连接。啊,我明白了。我没有意识到教程的一部分涉及到使用solc。很高兴您已经启动并运行。请仅发布一个答案,以便为回答问题做出贡献。指出另一个答案有帮助本身并不是答案。