./usr/bin/geth --datadir ./test命令会在当前目录创建一个test文件夹然后执行全节点下载。
新建的test文件夹下面有两个文件,一个geth一个keystore。前者存储全节点信息,后者存放用户密钥。
rm -r test 命令删除测试用的test文件夹。
geth --datadir .–syncmode会启动节点同步,但是耗时占用资源大,故不做下载。
在根目录创建myChain文件夹,新建一个genesis.json
代码如下:
{
"config": {
"chainId": 15,
},
"difficulty": "2000",
"gasLimit": "0x2fefd8"
"alloc": {
"0x42F656cD5Ce8D5bbCB5E6AAF862F08a50fC18F74": { "balance": "30000000000000" }
}
}
保存退出后回到根目录,创建初始区块
./usr/bin/geth --datadir …/myChain/ init …/myChain/genesis.json
显示出如下效果,即表示私链创始成功。
此时myChain文件夹出现了两个文件夹:geth和keystore。geth下有一个lightchaindata文件。初始信息全部保存在这个文件夹中。
…/usr/bin/geth --datadir . --networkid 8546
启动自己的私链。得到效果如图:
现在同级目录下写一个合约代码,功能是计算一个数的平方。test.sol文件代码如下:
// SPDX-License-Identifier: SimPL-2.0
pragma solidity ^0.8.6;
contract test{
function multiply(uint256 input) public pure returns(uint256 res){
return input * input;
}
}
书写完毕后打开终端,运行这个.sol文件
solc --bin test.sol
solc --abi test.sol
得到的效果如图所示:
接下来打开另外一个终端,启动自己的私链,用以下代码启动:
geth --networkid 8546 --datadir ../myChain/ --identity "TestNode" --rpc --rpcport "8545" --port "30303" --rpcaddr "localhost" --nodiscover --allow-insecure-unlock console
启动完成后需要定义sol文件编译出来的code 和 abi。复制粘贴以下编译出来的两端代码即可。其中注意code 需要 补充0x 作为开头。
3.创建合约对象
contract = eth.contract(abi)
4.预估gas费用
eth.estimateGas({data: code})
5.解锁账号:
personal.unlockAccount(“0x37d901f62ea6648ad6fcbbcb8e53383b48f0c19a”)
输入密码返回true成功。
6.部署合约
initializer = {from: web3.eth.accounts[0], data: code, gas:300000};
7.定义token
token = contract.new(initializer)
8.开启挖矿,等待一会
miner.start()
9.停止挖矿
miner.stop()
10获取挖矿地址
token.address
11.部署合约在刚刚的地址
myContract = contract.at("")
12.调用合约方法
myContract.getHelloMessage.call()
安装solc代码段:
sudo add-apt-repository ppa:ethereum/ethereum
sudo apt-get update
sudo apt-get install solc