99re热视频这里只精品,久久久天堂国产精品女人,国产av一区二区三区,久久久精品成人免费看片,99久久精品免费看国产一区二区三区

Moralis 智能合約事件

2022-11-14 10:33 更新

為什么我們需要同步和觀看智能合約事件?

當(dāng)智能合約中發(fā)生智能合約想要與 ?dapp ?和其他智能合約通信的有意義的事情時(shí),智能合約會(huì)發(fā)出所謂的事件。 智能合約的開(kāi)發(fā)人員決定何時(shí)發(fā)出這些事件。 例如 - 當(dāng)有人發(fā)送 ERC20 代幣時(shí) - 代幣合約將發(fā)出一個(gè)包含有關(guān)轉(zhuǎn)賬的所有數(shù)據(jù)的 ?Transferevent?。

當(dāng)您構(gòu)建 ?dapps ?時(shí),能夠?qū)崟r(shí)收聽(tīng)這些事件對(duì)您來(lái)說(shuō)非常重要。 例如,如果您正在構(gòu)建 NFT 市場(chǎng),您的 ?dapp ?需要知道何時(shí)有人創(chuàng)建了新的拍賣(mài)或有人對(duì)某項(xiàng)商品出價(jià)——智能合約將通過(guò)發(fā)出事件來(lái)傳達(dá)這些事件。

幸運(yùn)的是,Moralis Server 內(nèi)置了此功能。

您可以實(shí)時(shí)收聽(tīng)智能合約事件,還可以獲取特定事件的所有歷史事件。

同步和觀看合約事件

定義

您可以從特定的智能合約主題中獲取所有歷史事件并實(shí)時(shí)收聽(tīng)新事件。 它需要以下信息:

  • ?_description?:_用于標(biāo)識(shí)此同步作業(yè)的簡(jiǎn)短描述。
  • ?_topic?: _你將要聽(tīng)的主題,這可以是定義或 sha3:
    • ?bet(address,uint256,bool)?
    • ?0x20d932006281d267f137cd3921b707c2097e1f041b1291181cc3d0e86f449ebb?
  • ?abi?:如果您為此事件提供 abi,Moralis 將自動(dòng)解析所有字段并相應(yīng)地填充架構(gòu)。
  • ?address?:您將為此事件收聽(tīng)的地址。
  • ?tableName?:將在 Moralis 數(shù)據(jù)庫(kù)中創(chuàng)建的子類(lèi)的名稱(chēng)。

如果您不提供 _**abi **_,則將使用以下架構(gòu):

{
    "objectId": String,
    "block_hash": String,
    "topic0": String,
    "topic1": String,
    "block_timestamp": Date,
    "ACL": ACL,
    "data": String,
    "updatedAt": Date,
    "transaction_hash": String,
    "transaction_index": Number,
    "address": String,
    "log_index": Number,
    "createdAt": Date,
    "block_number": Number
}

這是一個(gè)有效 ?abi ?的示例:

{
  "anonymous": false,
  "inputs": [
    {
      "indexed": true,
      "internalType": "address",
      "name": "user",
      "type": "address"
    },
    {
      "indexed": true,
      "internalType": "uint256",
      "name": "bet",
      "type": "uint256"
    },
    {
      "indexed": true,
      "internalType": "bool",
      "name": "win",
      "type": "bool"
    },
    {
      "indexed": false,
      "internalType": "uint8",
      "name": "side",
      "type": "uint8"
    }
  ],
  "name": "bet",
  "type": "event"
}

如果提供的 ?abi ?包含“?id?”輸入,則由于在 Moralis.Object 中保留字段“?id?”,它將被解析為“?uid?”

表名字段限制

表名不允許包含數(shù)字字符(0 到 9)

名稱(chēng)字段限制

以 ?_? 開(kāi)頭的名稱(chēng)字段暫時(shí)不起作用,例如 ?"name": "_side"? 將不起作用,您必須將其更改為 ?"name": "side"? 才能使其起作用 .

歷史事件限額

如果創(chuàng)建的同步作業(yè)會(huì)導(dǎo)致檢索更多歷史事件,則?Sync_historical?選項(xiàng)將被禁用并且不會(huì)保存歷史數(shù)據(jù)??梢月?lián)系支持人員升級(jí)您的帳戶(hù)以啟用保存它,無(wú)論如何,但在這樣做之前要仔細(xì)考慮是否真的有必要??梢詫?shí)時(shí)處理事件而無(wú)需將數(shù)據(jù)保存到數(shù)據(jù)庫(kù)中。

編輯

要編輯同步作業(yè),請(qǐng)單擊安裝插件的服務(wù)器上的查看詳細(xì)信息,然后轉(zhuǎn)到?sync?選項(xiàng)卡。 在那里,您將看到所有同步作業(yè)。 單擊?Edit?按鈕。

image (2)

由于進(jìn)行任何更改都可能對(duì)事件架構(gòu)造成重大更改,因此保存更改需要提供新的 ?tableName?。 

如果未提供新表名,您將看到以下錯(cuò)誤消息:

image (3)

事件過(guò)濾器

想象一下,您只想根據(jù)某些條件在數(shù)據(jù)庫(kù)中獲取事件。

Moralis 為您提供了一種基于 ABI 變量定義過(guò)濾器的簡(jiǎn)單方法。

例如,下面的過(guò)濾器將僅同步可變?price?等于 80000000000000000 的事件實(shí)例:

?{“eq”:[“price”,“80000000000000000”]} ?

下面是更多過(guò)濾器示例。 您可以為事件中的任何變量設(shè)置條件。

If ?sender ?= ?0x0? AND ?receiver ?=? 0x0?

{
  "and": [
    { "eq": ["sender", "0x0"] },
    { "eq": ["receiver", "0x0"] }
  ]
}

If ?sender ?= ?0x0? OR ?receiver ?= ?0x0?

{
  "or": [
    { "eq": ["sender", "0x0"] },
    { "eq": ["receiver", "0x0"] }
  ]
}

If (?sender ?= ?0x0? AND ?amount ?= ?1000 ?) OR (?receiver ?= ?0x0? AND ?amount ?= ?100 ?)

{
  "or": [
    {
      "and": [
       { "eq": ["sender", "0x0"] },
       { "eq": ["amount", "1000"]}
      ]
    },
    {
      "and": [
       { "eq": ["receiver", "0x0"] },
       { "eq": ["amount", "1000"]}
      ]
    }
  ]
}

如果一個(gè)事件有 ?wei ?命名的值,你可以使用 ?<name>_decimals? 字段來(lái)運(yùn)行比較(比如大于/小于):

{
  "and": [
    { "eq": ["sender", "0x0"] },
    { "gt": ["amount_decimals", "1000"]}
  ]
}

從代碼看

觀看新的智能合約活動(dòng)

Moralis Server 有一個(gè)特殊的云功能,稱(chēng)為 ?watchContractEvent(options)?。 您可以使用主密鑰調(diào)用它。

注意:?limit ?參數(shù)僅適用于 Nitro 服務(wù)器(具有 ?coreservices ?插件的服務(wù)器)。 如果未提供限制參數(shù),則默認(rèn)值為 500000。

注意:目前通過(guò)代碼創(chuàng)建的事件不會(huì)在管理界面中看到,您只能在數(shù)據(jù)庫(kù)中看到它們,我們正在努力正確連接管理界面

// code example of creating a sync event from cloud code
let options = {
  chainId: "0x1",
  address: "0x5c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f",
  topic: "PairCreated(address, address, address, uint256)",
  abi: {
    anonymous: false,
    inputs: [
      {
        indexed: true,
        internalType: "address",
        name: "token0",
        type: "address",
      },
      {
        indexed: true,
        internalType: "address",
        name: "token1",
        type: "address",
      },
      {
        indexed: false,
        internalType: "address",
        name: "pair",
        type: "address",
      },
      {
        indexed: false,
        internalType: "uint256",
        name: "test",
        type: "uint256",
      },
    ],
    name: "PairCreated",
    type: "event",
  },
  limit: 500000,
  tableName: "UniPairCreated",
  sync_historical: false,
};

Moralis.Cloud.run("watchContractEvent", options, { useMasterKey: true });

取消觀看現(xiàn)有的智能合約事件

// unwatch event that has TABLE_NAME as table in the database
let options = { tableName: "TABLE_NAME" };
Moralis.Cloud.run("unwatchContractEvent", options, { useMasterKey: true });


以上內(nèi)容是否對(duì)您有幫助:
在線(xiàn)筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)