一、Geth私链搭建和智能合约的调用
1.启动私链步骤
①创世块文件并初始化(genesis.json)
{
"config": {
"chainId": 168,
"homesteadBlock": 0,
"eip150Block": 0,
"eip150Hash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"eip155Block": 0,
"eip158Block": 0,
"byzantiumBlock": 0,
"constantinopleBlock": 0,
"petersburgBlock": 0
},
"coinbase": "0x0000000000000000000000000000000000000000",
"difficulty": "0x000002",
"extraData": "0x54686973206973206d792066697273742045746865756d20426c6f636b636861696e21",
"gasLimit": "0xffffffff",
"nonce": "0x0000000000000042",
"mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"timestamp": "0x00",
"alloc": {
}
}
geth --datadir data init genesis.json
初始化结束后,会在目录下生产两个文件夹:
②启动私有链节点
geth --datadir "D:\Program Files\Geth\data" --rpc -rpcapi "eth,web3,miner,admin,personal,net" --rpccorsdomain "*" --nodiscover --allow-insecure-unlock --networkid 15
建议:
自己部署私有链的过程中,ipc地址可以直接使用0.0.0.0,无论使用linux还是windows都能访问;
networkid 和 chaidID 建议设置100以下并且相同,避免java web3j调用出现异常;
私有链的搭建建议在linux上,windows上搭建不稳定,经常容易出问题,linux也比windows操作更简便。
③IPC协议接入
geth attach ipc:\\.\pipe\geth.ipc
④ RPC协议接入
geth attach ipc:http://127.0.0.1:8545
然后就可以在这个端口进行命令操作。
⑤创建账户
personal.newAccount("123456")
⑥geth的基本命令
基本命令解析:http://cw.hubwiz.com/card/c/ethereum-json-rpc-api/1/3/39/
2.调用智能合约
①创建合约对象(abi和bytecode根据remix编译所得)
此处bytecode需要手动添加“0x”,建议把两个文件复制到txt中,然后再更改后缀名为html,这样打开复制的文本不会出什么问题。
(以上没截图完,一部分)
②预估手续费
③部署合约
④创建合约对象
⑤设置默认账户
web3.eth.defaultAccount = web3.eth.accounts[0]也是设置默认账户(通过web3)
⑥验证合约是否部署成功
⑦调用合约方法
此处返回的是交易的hash值,即交易ID;
问题一直没解决,不直接返回值,返回的是交易id,和别人的有所区别,一直未解决。
由来:区块链通过哈希算法对一个交易区块中的交易信息进行加密,并把信息压缩成由一串数字和字母组成的散列字符串
查看交易信息
3.linux ubuntu搭建私有链
//初始化节点
geth --datadir data0 init genesis.json
//启动
geth --identity "myethereum" --rpc --rpcaddr "0.0.0.0" --rpcport "8545" --rpccorsdomain "*" --datadir ./ --rpcapi "db,eth,net,web3,admin,personal" --nodiscover --allow-insecure-unlock --networkid 66 console
//启动其他终端连接同一个私有链
geth attach ipc:/home/tjm/Desktop/chainblock/list1/geth.ipc
二、智能合约编写
背景:区块链可以保证智能合约的不可篡改,不仅合约内容不可篡改,每次调用记录亦不可篡改;
1.需注意的用法
2.出现的问题
①开头
Warning: 建议添加 //SPDX-License-Identifier: UNLICENSED
②构造函数
解析:构造方法与编译版本不匹配导致
构造函数这警告会对上面调用合约造成影响,问题还为解决。
引用链接:
https://wenku.baidu.com/view/2b4dcf20001ca300a6c30c22590102020740f299.html(以太坊geth私链安装详细步骤)
https://blog.csdn.net/kevinyankai/article/details/102562562(在Geth私链上发布智能合约)
https://github.com/MaiJiantian/solidityExample(智能合约官方例子解析github)