日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
創(chuàng)新互聯(lián)Moralis教程:Moralis智能合約事件

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

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

無為網(wǎng)站建設公司成都創(chuàng)新互聯(lián),無為網(wǎng)站設計制作,有大型網(wǎng)站制作公司豐富經(jīng)驗。已為無為千余家提供企業(yè)網(wǎng)站建設服務。企業(yè)網(wǎng)站搭建\外貿(mào)網(wǎng)站制作要多少錢,請找那個售后服務好的無為做網(wǎng)站的公司定做!

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

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

您可以實時收聽智能合約事件,還可以獲取特定事件的所有歷史事件。

同步和觀看合約事件

定義

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

  • ?_description?:_用于標識此同步作業(yè)的簡短描述。
  • ?_topic?: _你將要聽的主題,這可以是定義或 sha3:
    • ?bet(address,uint256,bool)?
    • ?0x20d932006281d267f137cd3921b707c2097e1f041b1291181cc3d0e86f449ebb?
  • ?abi?:如果您為此事件提供 abi,Moralis 將自動解析所有字段并相應地填充架構(gòu)。
  • ?address?:您將為此事件收聽的地址。
  • ?tableName?:將在 Moralis 數(shù)據(jù)庫中創(chuà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
}

這是一個有效 ?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)

名稱字段限制

以 ?_? 開頭的名稱字段暫時不起作用,例如 ?"name": "_side"? 將不起作用,您必須將其更改為 ?"name": "side"? 才能使其起作用 .

歷史事件限額

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

編輯

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

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

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

事件過濾器

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

Moralis 為您提供了一種基于 ABI 變量定義過濾器的簡單方法。

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

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

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

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"]}
      ]
    }
  ]
}

如果一個事件有 ?wei ?命名的值,你可以使用 ?_decimals? 字段來運行比較(比如大于/小于):

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

從代碼看

觀看新的智能合約活動

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

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

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

// 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 });

標題名稱:創(chuàng)新互聯(lián)Moralis教程:Moralis智能合約事件
文章分享:http://www.dlmjj.cn/article/cdjjgcs.html