ETH源码学习(2)GetBalance
从这开始读,因为最简单。还能对重要的东西有所理解。如果是单节点debug,重启链之后余额会归零,所以最少要两个节点,同步区块就没这个问题了,具体原因还未知。 声明:eth版本:Geth/v1.10.7-unstable/darwin-arm64/go1.17.5,我对比了网上的一些文章,这块代码有改动,主要以下改变从BlockChain的snap中读account几乎放弃从trie中获取account,判断极为严苛,我想不到有什么情况能进入,应该是放弃了这层分析入口//命令 eth.getBalance('0x0d7dd6dbabee2ec9b325aa7aa8b42d75068e8597') //入口 func (s *PublicBlockChainAPI) GetBalance(ctx context.Context, address common.Address, blockNrOrHash rpc.BlockNumberOrHash) (*hexutil.Big, error) { //获取statedb state, _, err := s.b.StateAndHea...
Ether.js+Web3modal基础使用
1.说明现在网站会提供很多种钱包,web3modal可以提供统一的provider,不需要你操心太多东西用ether.js而不是web3.js的原因是简单,爽2.安装npm i web3modal npm i ethers //另外还需要安装对应wallet的包,自行搜索就行 3.连接钱包// MM默认就有,无需显式加入 const providerOptions = { walletconnect: { package: walletconnectProvider, options: { infuraId: "", }, }, }; //构建Web3Modal对象 const web3Modal = new Web3Modal({ //缓存provider cacheProvider: true, providerOptions, }); //连接wallet async function connect() { try { const web3ModalProvider = await web3Modal.connect(); provider = new ethers.pr...
ETH源码学习(1)创建私有链
下载geth,创建genesis.json{ "config": { "chainId": 8888, //自行修改 "homesteadBlock": 0, "daoForkBlock": 0, "daoForkSupport": true, "eip150Block": 0, "eip155Block": 0, "eip158Block": 0, "byzantiumBlock": 0, "constantinopleBlock": 0, "petersburgBlock": 0, "ethash": {} }, "nonce": "0x42", "timestamp": "0x0", "extraData": "0x11bbe8db4e347b4e8c937c1c8370e4b5ed33adb3db69cbdb7a38e1e50b1b82fa", "gasLimit": "0xffffffff", "difficulty": "0x700000",//难度,越大挖矿越慢 "alloc": { "093f59f1d91017d30d8c2caa78feb5beb0d2cfaf...
ETH源码学习(2)GetBalance
从这开始读,因为最简单。还能对重要的东西有所理解。如果是单节点debug,重启链之后余额会归零,所以最少要两个节点,同步区块就没这个问题了,具体原因还未知。 声明:eth版本:Geth/v1.10.7-unstable/darwin-arm64/go1.17.5,我对比了网上的一些文章,这块代码有改动,主要以下改变从BlockChain的snap中读account几乎放弃从trie中获取account,判断极为严苛,我想不到有什么情况能进入,应该是放弃了这层分析入口//命令 eth.getBalance('0x0d7dd6dbabee2ec9b325aa7aa8b42d75068e8597') //入口 func (s *PublicBlockChainAPI) GetBalance(ctx context.Context, address common.Address, blockNrOrHash rpc.BlockNumberOrHash) (*hexutil.Big, error) { //获取statedb state, _, err := s.b.StateAndHea...
Ether.js+Web3modal基础使用
1.说明现在网站会提供很多种钱包,web3modal可以提供统一的provider,不需要你操心太多东西用ether.js而不是web3.js的原因是简单,爽2.安装npm i web3modal npm i ethers //另外还需要安装对应wallet的包,自行搜索就行 3.连接钱包// MM默认就有,无需显式加入 const providerOptions = { walletconnect: { package: walletconnectProvider, options: { infuraId: "", }, }, }; //构建Web3Modal对象 const web3Modal = new Web3Modal({ //缓存provider cacheProvider: true, providerOptions, }); //连接wallet async function connect() { try { const web3ModalProvider = await web3Modal.connect(); provider = new ethers.pr...
ETH源码学习(1)创建私有链
下载geth,创建genesis.json{ "config": { "chainId": 8888, //自行修改 "homesteadBlock": 0, "daoForkBlock": 0, "daoForkSupport": true, "eip150Block": 0, "eip155Block": 0, "eip158Block": 0, "byzantiumBlock": 0, "constantinopleBlock": 0, "petersburgBlock": 0, "ethash": {} }, "nonce": "0x42", "timestamp": "0x0", "extraData": "0x11bbe8db4e347b4e8c937c1c8370e4b5ed33adb3db69cbdb7a38e1e50b1b82fa", "gasLimit": "0xffffffff", "difficulty": "0x700000",//难度,越大挖矿越慢 "alloc": { "093f59f1d91017d30d8c2caa78feb5beb0d2cfaf...
Share Dialog
Share Dialog
Subscribe to point
Subscribe to point
<100 subscribers
<100 subscribers
func main() {
client, err := ethclient.Dial("https://rinkeby-light.eth.linkpool.io/")
if err != nil {
log.Fatal(err)
}
//获取当前的最新区块
header, err := client.HeaderByNumber(context.Background(), nil)
if err != nil {
log.Fatal(err)
}
fmt.Println("最新区块", header.Number.String()) // 5671744
//开始查询日志,可以添加过滤条件,查询符合你想要的日志
query := ethereum.FilterQuery{
FromBlock: big.NewInt(
10570948),
ToBlock: header.Number,
Addresses: []common.Address{
common.HexToAddress("0x40490DF1cc631817D24BA324147c59821C8970BF"),
common.HexToAddress("0xE3a463d743F762D538031BAD3f1E748BB41f96ec"),
},
}
logs, err := client.FilterLogs(context.Background(), query)
if err != nil {
log.Fatal(err)
}
//解析日志结果
for _, vLog := range logs {
fmt.Println("Data:", vLog.Data) // 0x3404b8c050aa0aacd0223e91b5c32fee6400f357764771d0684fa7b3f448f1a8
fmt.Println("contactAddress:", vLog.Address) // 0x3404b8c050aa0aacd0223e91b5c32fee6400f357764771d0684fa7b3f448f1a8
fmt.Println("BlockHash:", vLog.BlockHash.Hex()) // 0x3404b8c050aa0aacd0223e91b5c32fee6400f357764771d0684fa7b3f448f1a8
fmt.Println("BlockNumber:", vLog.BlockNumber) // 2394201
fmt.Println("TxHash:", vLog.TxHash.Hex()) // 0x280201eda63c9ff6f305fcee51d5eb86167fab40ca3108ec784e8652a0e2b1a6
//具体的内容
var topics [4]string
for i := range vLog.Topics {
//i=0,日志名称的十六进制
//后续的元素是日志内容
fmt.Println("Topics:", i, vLog.Topics[i])
topics[i] = vLog.Topics[i].Hex()
}
}
//将方法转成16进制,可用于多种日志判断具体执行什么业务逻辑
eventSignature := []byte("Transfer(address,address,uint256)")
hash := crypto.Keccak256Hash(eventSignature)
fmt.Println("eventSignature:", hash.Hex())
}
func main() {
client, err := ethclient.Dial("https://rinkeby-light.eth.linkpool.io/")
if err != nil {
log.Fatal(err)
}
//获取当前的最新区块
header, err := client.HeaderByNumber(context.Background(), nil)
if err != nil {
log.Fatal(err)
}
fmt.Println("最新区块", header.Number.String()) // 5671744
//开始查询日志,可以添加过滤条件,查询符合你想要的日志
query := ethereum.FilterQuery{
FromBlock: big.NewInt(
10570948),
ToBlock: header.Number,
Addresses: []common.Address{
common.HexToAddress("0x40490DF1cc631817D24BA324147c59821C8970BF"),
common.HexToAddress("0xE3a463d743F762D538031BAD3f1E748BB41f96ec"),
},
}
logs, err := client.FilterLogs(context.Background(), query)
if err != nil {
log.Fatal(err)
}
//解析日志结果
for _, vLog := range logs {
fmt.Println("Data:", vLog.Data) // 0x3404b8c050aa0aacd0223e91b5c32fee6400f357764771d0684fa7b3f448f1a8
fmt.Println("contactAddress:", vLog.Address) // 0x3404b8c050aa0aacd0223e91b5c32fee6400f357764771d0684fa7b3f448f1a8
fmt.Println("BlockHash:", vLog.BlockHash.Hex()) // 0x3404b8c050aa0aacd0223e91b5c32fee6400f357764771d0684fa7b3f448f1a8
fmt.Println("BlockNumber:", vLog.BlockNumber) // 2394201
fmt.Println("TxHash:", vLog.TxHash.Hex()) // 0x280201eda63c9ff6f305fcee51d5eb86167fab40ca3108ec784e8652a0e2b1a6
//具体的内容
var topics [4]string
for i := range vLog.Topics {
//i=0,日志名称的十六进制
//后续的元素是日志内容
fmt.Println("Topics:", i, vLog.Topics[i])
topics[i] = vLog.Topics[i].Hex()
}
}
//将方法转成16进制,可用于多种日志判断具体执行什么业务逻辑
eventSignature := []byte("Transfer(address,address,uint256)")
hash := crypto.Keccak256Hash(eventSignature)
fmt.Println("eventSignature:", hash.Hex())
}
No activity yet