国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Ethereum以太坊事件日志查詢參數(shù)

這篇具有很好參考價(jià)值的文章主要介紹了Ethereum以太坊事件日志查詢參數(shù)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

一、Ethereum事件日志查詢參數(shù)

詳見:https://www.quicknode.com/docs/ethereum/eth_getLogs

  • address:合約地址
  • fromBlock:開始區(qū)塊
  • toBlock:結(jié)束區(qū)塊
  • topics:主題數(shù)組
  • blockHash:區(qū)塊哈希,優(yōu)先級(jí)高于fromBlock、toBlock

這里主要介紹topics參數(shù),其他參數(shù)都比較好理解,topics是長(zhǎng)度為4的數(shù)組集合,topic分為2種:一種事件簽名topic,另一種indexed索引參數(shù)值topic。
topics的的0號(hào)位子數(shù)組放事件簽名哈希,1/2/3號(hào)位子數(shù)組對(duì)應(yīng)放事件的indexed索引參數(shù)值對(duì)應(yīng)的哈希。
以demo合約舉例:

pragma solidity ^0.4.4;

contract Hello {
    string name;
    event LogSet(string s);
    event LogSet1(string indexed s1);
    event LogSet2(string indexed s1, string indexed s2);
    event LogSet3(string indexed s1, string indexed s2, string indexed s3);

    constructor() public {
        name = "hello";
    }

    function get() public view returns (string) {
        return name;
    }

    function set(string newName) public {
        name = newName;
        emit LogSet(newName);
        emit LogSet1(newName);
        emit LogSet2(newName, "name2");
        emit LogSet3(newName, "name2", "name3");
    }
}

如果合約調(diào)用set(“Tom”),事件LogSet3的1號(hào)位indexed索引參數(shù)值為"Tom",2號(hào)位為"name2",3號(hào)位為"name3"。
注意:
合約事件里最多只能有3個(gè)indexed索引參數(shù)。
如果事件定義改為:

event LogSet3(string indexed s1, string s2, string indexed s3);

事件LogSet3的1號(hào)位indexed索引參數(shù)值為"Tom",2號(hào)位為"name3",沒(méi)有3號(hào)位。

二、需求

部署一個(gè)新的Hello合約,并調(diào)用一次set函數(shù),以觸發(fā)生成4條不同的事件日志。要求查詢?cè)摵霞s的LogSet3事件日志。

三、實(shí)現(xiàn)

第一步,合約部署前,獲取到最新塊高,作為fromBlock,假設(shè)9684。
第二步,部署Hello合約,并調(diào)用set函數(shù),入?yún)ewName=“Tom”,假設(shè)獲取到新合約地址0x0dba67483eddb71a84ac0834cd4c8c89dc971d4b。
第三步,再次獲取最新塊高,作為toBlock,假設(shè)9686。
第四步,計(jì)算事件LogSet3(string,string,string)的簽名,得到0x3e03ccf7099c79040ac78f368a6a038e5d7918b8504f8cc99fd4d1ae71181e7b。
第五步,計(jì)算第一個(gè)indexed索引參數(shù)值"Tom"的哈希0x6984758a5a2907300d836a0ed6101bb5426c0a4422c0d996e8bbf9e59bb8c7cc,計(jì)算第二個(gè)indexed索引參數(shù)值"name2"的哈希0x7d51639d4f8290223cffdcc7a75498fd9c00ab65e7daf27837046fec6a6d6504,計(jì)算第三個(gè)indexed索引參數(shù)值"name3"的哈希0x289ff8670e65b79f5a7c14daf83f381a29ae238fff49f37396cc9100fb243074。
第六步,組裝日志查詢請(qǐng)求參數(shù),如下:

{
    "address": "0x0dba67483eddb71a84ac0834cd4c8c89dc971d4b",
    "toBlock": "9686",
    "topics": [
        [
            "0x3e03ccf7099c79040ac78f368a6a038e5d7918b8504f8cc99fd4d1ae71181e7b"
        ],
        [
            "0x6984758a5a2907300d836a0ed6101bb5426c0a4422c0d996e8bbf9e59bb8c7cc"
        ],
        [
            "0x7d51639d4f8290223cffdcc7a75498fd9c00ab65e7daf27837046fec6a6d6504"
        ],
        [
            "0x289ff8670e65b79f5a7c14daf83f381a29ae238fff49f37396cc9100fb243074"
        ]
    ],
    "fromBlock": "9684"
}

實(shí)際上,如果指定了具體的Hello合約地址,請(qǐng)求參數(shù)里不需要第一個(gè)和第二個(gè)索引參數(shù)topic,也可以唯一區(qū)分開該合約的其他三個(gè)事件,如此,請(qǐng)求參數(shù)如下:

{
    "address": "0x0dba67483eddb71a84ac0834cd4c8c89dc971d4b",
    "toBlock": "9686",
    "topics": [
        [
            "0x3e03ccf7099c79040ac78f368a6a038e5d7918b8504f8cc99fd4d1ae71181e7b"
        ],
        null,
        null,
        [
            "0x289ff8670e65b79f5a7c14daf83f381a29ae238fff49f37396cc9100fb243074"
        ]
    ],
    "fromBlock": "9684"
}

四、其他

4.1、topics中4個(gè)子數(shù)組之間是OR的關(guān)系

以太坊官網(wǎng)說(shuō)明:https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_newfilter

  • topics: Array of DATA, - (optional) Array of 32 Bytes DATA topics. Topics are order-dependent. Each topic can also be an array of DATA with “or” options.

舉例:
[[A, B], [A, B]] “(A OR B) in first position AND (A OR B) in second position (and anything after)”

4.2、涉及枚舉入?yún)㈩愋陀?jì)算事件簽名

如果事件參數(shù)中包含枚舉類型,如何正確計(jì)算該事件簽名的topic。
在solidity中的enum類型,實(shí)際上是無(wú)符號(hào)整數(shù),當(dāng)枚舉數(shù)量是小于等于256(2的8次方)個(gè),則enum是uint8類型的,如果大于256且小于等于65536(2的16次方),則enum是uint16類型的,以次類推。其實(shí)在remix中也可以看到,枚舉內(nèi)的數(shù)量小于256,枚舉類型自動(dòng)使用uint8,如下:
Ethereum以太坊事件日志查詢參數(shù)
所以對(duì)上面的例子,事件簽名DataSaved(ProofType,bytes)是錯(cuò)誤的,DataSaved(enum,bytes)也是錯(cuò)誤的。正確應(yīng)該是DataSaved(uint8,bytes)
如果ProofType枚舉的類型從2種變?yōu)?57種,在remix里重新部署合約后,可以看到uint8自動(dòng)變?yōu)閡int16,如下:
Ethereum以太坊事件日志查詢參數(shù)文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-465914.html

到了這里,關(guān)于Ethereum以太坊事件日志查詢參數(shù)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 什么是Ethereum以太坊(ETH)?以及以太坊的一些基礎(chǔ)知識(shí)

    什么是Ethereum以太坊(ETH)?以及以太坊的一些基礎(chǔ)知識(shí)

    Ethereum以太坊(ETH)是由Vitalik Buterin所創(chuàng)建,一種允許智能合約和去中心化應(yīng)用程序(dapps)在其網(wǎng)絡(luò)上運(yùn)行的加密貨幣。 以太坊是僅次于比特幣的第二大加密貨幣,它是一個(gè)基于區(qū)塊鏈的平臺(tái),用于創(chuàng)建去中心化應(yīng)用程序(dapps)。 比特幣被設(shè)計(jì)成一種貨幣和價(jià)值儲(chǔ)存手段,而

    2024年02月03日
    瀏覽(22)
  • 11M 以太坊 ethereum OpenZeppelin : 開發(fā)智能合約

    ? 設(shè)置項(xiàng)目 ? 第一份合同 ? 編譯 Solidity ? 添加更多合約 ? 使用 OpenZeppelin 合約 ? OpenZeppelin Tutorials 教程 ? Contact 聯(lián)系方式 創(chuàng)建項(xiàng)目后的第一步是安裝開發(fā)工具。 以太坊最流行的開發(fā)框架是Hardhat,我們用ethers.js介紹了它最常見的用途。下一個(gè)最受歡迎的是使用web3.js的

    2024年02月11日
    瀏覽(33)
  • 11U 以太坊 ethereum OpenZeppelin : 升級(jí)智能合約

    ? 升級(jí)中有什么 ? 使用升級(jí)插件升級(jí) ? 升級(jí)如何運(yùn)作 ? 初始化 ? 升級(jí) ? 測(cè)試 ? OpenZeppelin Tutorials 教程 ? Contact 聯(lián)系方式 使用OpenZeppelin 升級(jí)插件部署的智能合約可以升級(jí)以修改其代碼,同時(shí)保留其地址、狀態(tài)和余額。這使您可以迭代地向項(xiàng)目添加新功能,或修復(fù)您在

    2023年04月08日
    瀏覽(33)
  • 以太坊創(chuàng)建私有鏈 go-ethereum

    以太坊創(chuàng)建私有鏈 go-ethereum

    目錄 啟動(dòng)節(jié)點(diǎn)同步 同步主網(wǎng)區(qū)塊 同步測(cè)試網(wǎng)絡(luò)的區(qū)塊 同步Ropsten測(cè)試網(wǎng)絡(luò)的區(qū)塊 ?同步RinkeyBy測(cè)試網(wǎng)絡(luò)區(qū)塊 搭建自己的私有鏈? 創(chuàng)建genesis.json init初始化gensis.json? 啟動(dòng)私鏈 安裝好了Geth,現(xiàn)在我們可以嘗試運(yùn)行以下它。執(zhí)行下面的命令,geth就會(huì)開始同步區(qū)塊,并存儲(chǔ)在當(dāng)前

    2024年02月08日
    瀏覽(45)
  • 以太坊go-ethereum源碼研讀(二)applyTransaction相關(guān)

    在前面以太坊go-ethereum源碼研讀(一)中所討論的 Process 函數(shù)調(diào)用了該 applyTransaction 函數(shù)來(lái)執(zhí)行交易相關(guān)指令,于是進(jìn)一步對(duì)該函數(shù)進(jìn)行分析,以明晰以太坊交易的全過(guò)程。 分析過(guò)程中一些結(jié)構(gòu)體或函數(shù)在以太坊go-ethereum源碼研讀(一)中已經(jīng)討論到,對(duì)這些結(jié)構(gòu)體和函數(shù)則

    2023年04月25日
    瀏覽(24)
  • 【區(qū)塊鏈 | 智能合約】Ethereum源代碼(8)- Ethereum服務(wù)和以太坊P2P協(xié)議發(fā)送廣播源碼分析

    【區(qū)塊鏈 | 智能合約】Ethereum源代碼(8)- Ethereum服務(wù)和以太坊P2P協(xié)議發(fā)送廣播源碼分析

    在“【區(qū)塊鏈 | 智能合約】Ethereum源代碼(2)- go-ethereum 客戶端入口代碼和Node分析”一文中,我們提到Ethereum作為一個(gè)service,被Node 注冊(cè)進(jìn)去。Node start的時(shí)候會(huì)啟動(dòng)其注冊(cè)的所有服務(wù),Ethereum service也是一樣。 初始化方法

    2024年01月21日
    瀏覽(42)
  • 以太坊燃料費(fèi)用定價(jià)機(jī)制Ethereum Gas Fee Pricing Mechanism

    以太坊燃料費(fèi)用定價(jià)機(jī)制Ethereum Gas Fee Pricing Mechanism

    ????????以太坊燃料在交易過(guò)程中起著重要作用。從以太坊系統(tǒng)的角度,通過(guò)燃料費(fèi)用提高惡意交易的成本減少攻擊者的攻擊收益,增強(qiáng)了以太坊交易的安全性,也促使合約開發(fā)者優(yōu)化設(shè)計(jì)減少合約對(duì)以太坊算力的消耗;從交易發(fā)起者角度,通過(guò)設(shè)定燃料相關(guān)的參數(shù),以盡

    2024年01月15日
    瀏覽(22)
  • 【區(qū)塊鏈 | 智能合約】Ethereum源代碼(10)- 以太坊Downloader源碼分析

    上一節(jié)分析到Fetcher用于同步網(wǎng)絡(luò)節(jié)點(diǎn)的新區(qū)塊和新的交易數(shù)據(jù),如果新區(qū)塊和本地最新的區(qū)塊相隔距離較遠(yuǎn),說(shuō)明本地區(qū)塊數(shù)據(jù)太舊,F(xiàn)etcher就不會(huì)同步這些區(qū)塊。這時(shí)候就要借助Downloader來(lái)同步完整的區(qū)塊數(shù)據(jù)。 一,啟動(dòng)Downloader handler 初始化的時(shí)候會(huì)進(jìn)行Downloader的初始化:

    2024年02月15日
    瀏覽(25)
  • 11O 以太坊 ethereum OpenZeppelin : 部署智能合約并與之交互

    ? 建立本地區(qū)塊鏈 ? 部署智能合約 ? 從控制臺(tái)交互 ? 以編程方式交互 ? 獲取合約實(shí)例 ? 調(diào)用合約 ? 發(fā)送交易 ? OpenZeppelin Tutorials 教程 ? Contact 聯(lián)系方式 在開始之前,我們首先需要一個(gè)可以部署合約的環(huán)境。以太坊區(qū)塊鏈(通常稱為“主網(wǎng)”,表示“主網(wǎng)絡(luò)”)需要

    2023年04月08日
    瀏覽(22)
  • 【區(qū)塊鏈 | 智能合約】Ethereum源代碼(11)- 以太坊核心BlockChain源碼分析

    前面幾節(jié)都在分析以太坊的通信協(xié)議,怎么廣播,怎么同步,怎么下載。這一節(jié)講講以太坊的核心模塊BlockChain,也就是以太坊的區(qū)塊鏈。 一,BlockChain的初始化 Ethereum服務(wù)初始化func init() 的時(shí)候會(huì)調(diào)用core.SetupGenesisBlock來(lái)加載創(chuàng)始區(qū)塊。顧名思義,創(chuàng)始區(qū)塊就是以太坊區(qū)塊鏈中

    2024年02月08日
    瀏覽(45)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包