13

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

4

5 回答 5

18

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

要解决您的问题,请访问https://chriseth.github.io/browser-solidity/并插入您的 Solidity。右侧的 Bytecode 字段将为您提供“evmCode”的值,Interface 将为您提供 ABI .

您还可以从“Web3 deploy”复制代码段并将其粘贴到您的代码中以部署您的合同。

于 2015-11-29T03:01:29.070 回答
2

ABI 基本上是面向公众的接口,显示可以调用的方法。获取 abi 的最简单方法是使用https://remix.ethereum.org。只需粘贴您的代码和合同选项卡在列的底部,您会找到一个链接,上面写着合同详细信息,它基本上是 ABI json

反过来你也可以使用 web3 的contracts.Introduction.interfaceapi 来获取 abi。

于 2018-06-29T13:10:55.653 回答
2

ABI 是可以使用 java 脚本读取的智能合约的表示。要从 etherum 中已部署的合约帐户读取数据,您需要一些额外的细节,例如 abi。

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

1.每个合约都有这样的合约哈希地址:0x0D8775F648430679A709E98d2b0Cb6250d2887EF

2.去etherscan.io,在搜索栏搜索你的合约地址hash,你就会得到合约。

3.在合同中转到代码,在那里你可以找到这个 abi

可以查看此链接以找到 abi

于 2021-06-03T07:29:42.073 回答
1

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"
 }]

这是在编译合约后返回的。你可以看到它由我们合约中使用的方法组成。

于 2020-05-25T00:54:05.577 回答
1

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

于 2019-10-18T07:39:28.577 回答