用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