IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 区块链 -> 以太坊学习笔记(二):通过SDK调用以太坊合约 -> 正文阅读

[区块链]以太坊学习笔记(二):通过SDK调用以太坊合约

环境准备

搭建以太坊链

详细可参考之前博客:以太坊学习笔记(一)

1、创建创世块文件

{
    "config": {
       "chainId": 10001, 
       "homesteadBlock": 0, 
       "eip155Block": 0, 
       "eip158Block": 0
   },
   "alloc" : {},
   "coinbase" : "0x0000000000000000000000000000000000000000",
   "difficulty" : "0x20000",
   "extraData" : "",
   "gasLimit" : "0x2fefd8",
   "nonce" : "0x0000000000000042",
   "mixhash" : "0x0000000000000000000000000000000000000000000000000000000000000000",
   "parentHash" : "0x0000000000000000000000000000000000000000000000000000000000000000",
   "timestamp" : "0x00"
}

2、启动节点

//节点1
mkdir node1
geth init --datadir node1 genesis.json
//启动节点
geth --datadir node1 --port 30312 --rpc --rpcaddr 127.0.0.1 --rpcport 8541 --networkid 10001 console

//控制台查看
> admin.nodeInfo
{
  enode: "enode://9314e0962ca2c328a1bb0c184800ef3992b033e3643a32b7c4b10d16be556bf2e13ca481d0d0112b74b2034409cae50e32aabba86c5390405b1951b909b903ed@115.227.7.13:30312",
  enr: "enr:-Je4QKZ2D_79sj9G_gNsjFQZZf54UGgStuUAYFqKp7sDCDdJEunDu8I2ND_iRgqR2N7Tcra2vEH1h_uvWwJ3NtGDwlwGg2V0aMfGhHEB0w2AgmlkgnY0gmlwhHPjBw2Jc2VjcDI1NmsxoQOTFOCWLKLDKKG7DBhIAO85krAz42Q6MrfEsQ0WvlVr8oN0Y3CCdmiDdWRwgnZo",
  id: "4ae7a565d53f83de2fce194daa0731748edb7e1483eee131e96db69be60aa37c",
  ip: "115.227.7.13",
  listenAddr: "[::]:30312",
  name: "Sipe/v2.0.3-stable-61c08104/darwin-amd64/go1.15",
  ports: {
    discovery: 30312,
    listener: 30312
  },
  protocols: {
    eth: {
      config: {
        chainId: 10001
      },
      consensus: "ethash",
      difficulty: 57359637554,
      genesis: "0x5e1fc79cb4ffa4739177b5408045cd5d51c6cf766133f23f7cd72ee1f8d790e0",
      head: "0x1afc02a4c62d3f1814fecbcfee3e753f5572a01145bad42ed1dcfb7c0327b52d",
      network: 10001
    }
  }
}
> 

//节点2
mkdir node2
geth init --datadir node2 genesis.json
geth --datadir node2 --port 30313 --rpc --rpcaddr 127.0.0.1 --rpcport 8542 --networkid 10001 --bootnodes "enode://9314e0962ca2c328a1bb0c184800ef3992b033e3643a32b7c4b10d16be556bf2e13ca481d0d0112b74b2034409cae50e32aabba86c5390405b1951b909b903ed@127.0.0.1:30312" console --allow-insecure-unlock

3、开始挖矿

//创建账户
personal.newAccount()
miner.setEtherbase(”account1“)

//启动挖矿
miner.start()

//创建另一个账户开始转账
personal.newAcount()
personal.unlockAccount("acount1")

> eth.sendTransaction({from:"acount1",to:"account1",value:web3.toWei(10,"ether")}) 
> eth.getBalance("account")

智能合约

1、准备一个solidity合约
2、用abigen solc (可以网上下载对应版本) 工具生成将solidity合约生成go合约

//demo.sol
pragma solidity^0.8.7;
contract demo {
    string message;
    constructor(string memory _msg) {
        message = _msg;
    }
    function getMsg() public view returns (string memory) {
        return message;
    }
    function setMsg(string memory _msg) public {
        message = _msg;
    }
}

abigen solc 工具生成demo.go

 abigen -sol demo.sol -pkg main -type demo -out demo.go

SDK 调用

1、通过ectclient创建与以太坊链连接
2、身份准备
3、部署合约
4、调用合约

func main() {
	//1、创建客户端
	cli, err := ethclient.Dial("http://localhost:8541")
	if err != nil {
		log.Panic("failed to dial", err)
	}

	//2.身份准备
	keyin := strings.NewReader(keyinfo)
	chainID, err := cli.ChainID(context.Background())
	if err != nil {
		log.Panic("failed to get chainID", err)
	}

	auth, err := bind.NewTransactorWithChainID(keyin, "123456", chainID)
	if err != nil {
		log.Panic("auth create failed:", err)
	}
	fmt.Println("chainID: ", chainID)

	//3、部署合约
	addr, tx, instance, err := DeployDemo(auth, cli, "hello world")
	if err != nil {
		log.Panic("failed to deploy demo: ", err)
	}
	fmt.Println("addr:", addr.Hex())
	fmt.Println("tx:", tx.Hash())
	msg, err := instance.GetMsg(nil)
	if err != nil {
		log.Panic("failed to getMsg: ", err)
	}
	fmt.Println("msg: ", msg)
}

运行

go run main.go demo.go

结果:
执行结果

  区块链 最新文章
盘点具备盈利潜力的几大加密板块,以及潜在
阅读笔记|让区块空间成为商品,打造Web3云
区块链1.0-比特币的数据结构
Team Finance被黑分析|黑客自建Token“瞒天
区块链≠绿色?波卡或成 Web3“生态环保”标
期货从入门到高深之手动交易系列D1课
以太坊基础---区块验证
进入以太坊合并的五个数字
经典同态加密算法Paillier解读 - 原理、实现
IPFS/Filecoin学习知识科普(四)
上一篇文章           查看所有文章
加:2022-03-13 21:52:26  更:2022-03-13 21:52:37 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 23:00:50-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码