用Remix编译deploy smart contract到moac 主链 vnode - coolcat2012/MoacDoc GitHub Wiki

创建工程

打开Remix窗口

https://remix.ethereum.org

添加MyApp.sol文件

pragma solidity ^0.4.11;

contract MyApp {
    
    uint public value;
    string public name;
    
    constructor(uint _value, string _name) public {
        value = _value;
        name = _name;
    }
    
    function inc() public {
        value ++;
    }    
    
    function dec() public {
        if(value > 0) {
            value --;
        }
    }
    
    function changeName(string _name) public {
        name = _name;
    }
    
    function setSquare(uint _value) public {
        uint i = getSquare(_value);
        value = i;
    }
    
    function getSquare(uint _value) private returns (uint) {
        uint i = _value;
        i = i * _value;
        return i;
    }
}

虚拟机环境调试,打断点单步跟踪,拷贝abi和bin

编译:Click "start to compile" 先在网页虚拟环境调试: Run->Javascript VM->Deploy 之后在deploy出来的panel里面,click相应的函数测试。之后在中间窗口click debug按钮就可以单步调试。

复制bytecode和abi: compile菜单下面,click那个detail按钮,再到弹出窗口的bytecode和abi处拷贝。

直接在remix上面deploy到moac链

Remix目前支持Injected Web3,比如MetaMask,这样MetaMask管理钱包账户,然后MetaMask还可以指向他的节点或我们自己的节点。 我们这里用第三种,就是Remx直接通过RPC接到我们自己的Moac Vnode节点。

注意一定要在启动vnode的时候在命令行加上, 否则remix不能连接

--rpccorsdomain "*"

注意一定要先把账户解锁

personal.unlockAccount(mc.accounts[0], "")

调用函数可以在console里面,比如运行inc函数,在compile detail的function hash找到inc对应的hash是"0x371303c0":

mc.sendTransaction(
{
    from: mc.accounts[0],
    value:chain3.toSha(0,'mc'),
    to: "0xf0319eb71501cc61263b9684d79b110f4670f5aa",
    gas: "2000000",
    gasPrice: chain3.mc.gasPrice,
    data: "0x371303c0"
});

然后在remix点击value按钮,查看是否增加

还有一种办法查看value的值:

mc.getStorageAt("0xf0319eb71501cc61263b9684d79b110f4670f5aa", 0x0)
"0x000000000000000000000000000000000000000000000000000000000000000a"

refer to https://medium.com/aigang-network/how-to-read-ethereum-contract-storage-44252c8af925