Moralis 用戶余額和交易

2022-05-11 09:56 更新

同步和觀看地址

定義

您可以獲取所有歷史交易并實(shí)時(shí)收聽新交易。 它需要以下信息:

  • ?ChainId?(必填):要同步的鏈
  • ?Address?(必填):您將為此事件收聽的地址。
  • ?Sync_historical?(可選):同步歷史數(shù)據(jù)選項(xiàng)。 默認(rèn)值true

image

image (1)

歷史事件限額

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

監(jiān)控經(jīng)過身份驗(yàn)證的用戶

Moralis 服務(wù)器為在某些時(shí)候通過您的應(yīng)用程序進(jìn)行身份驗(yàn)證的用戶實(shí)時(shí)同步所有交易和余額。 您無需執(zhí)行任何操作即可啟用此功能,因?yàn)樗谒?nbsp;Moralis 服務(wù)器中默認(rèn)啟用。

與往常一樣,我們希望您專注于用戶體驗(yàn),并將同步區(qū)塊鏈數(shù)據(jù)這一平凡而復(fù)雜的任務(wù)留給我們。

Moralis Server 將實(shí)時(shí)將數(shù)據(jù)插入和更新到您的數(shù)據(jù)庫中,以便您通過簡(jiǎn)單的數(shù)據(jù)庫查詢即可獲取用戶的所有最新交易和余額。

監(jiān)控非認(rèn)證地址

默認(rèn)情況下,?EthTransactions ?集合中只會(huì)出現(xiàn)注冊(cè)用戶的交易數(shù)據(jù)。 要觀看特定地址(例如集中式交易所熱錢包),請(qǐng)?zhí)砑有碌耐胶陀^看地址插件,輸入地址,然后單擊“添加插件”按鈕。

這將啟動(dòng)一個(gè)同步作業(yè)并向 ?WatchedXxxAddress ?集合添加一個(gè)條目,其中“?Xxx?”是此處定義的鏈名稱之一。 一旦交易被同步,它們就可以像任何其他交易一樣被查詢,包括實(shí)時(shí)查詢。

const web3 = new Moralis.Web3();
const binanceWallet = "0x...";

// create query
const query = new Moralis.Query("EthTransactions");
query.equalTo("to_address", binanceWallet);

// subscribe for real-time updates
const subscription = await query.subscribe();
subscription.on("create", function (data) {
  const amountEth = web3.utils.fromWei(data.attributes.value);
  console.log(`${amountEth} deposited to Binance`);
});

注意:在新的 Nitro 服務(wù)器上,訂閱將更新而不是創(chuàng)建

注意:最新版本服務(wù)器的表名將是 ?_AddressSyncStatus ?而不是 ?WatchedXxxAddress ?

請(qǐng)記住,如果啟用了 ?Sync_historical ?選項(xiàng),則查看具有大量交易量的地址將導(dǎo)致存儲(chǔ)大量數(shù)據(jù)。

歷史交易限額

如果監(jiān)視的地址會(huì)導(dǎo)致檢索更多歷史事務(wù),則 ?Sync_historical ?選項(xiàng)將被禁用并且不會(huì)保存任何歷史數(shù)據(jù)。 可以聯(lián)系支持以升級(jí)您的帳戶以啟用保存它,但在這樣做之前請(qǐng)仔細(xì)考慮是否真的有必要。 無需將數(shù)據(jù)保存到數(shù)據(jù)庫即可實(shí)時(shí)處理新事務(wù)。 您也可以調(diào)用 ?Deep Index API? 選擇性地查詢歷史數(shù)據(jù)。

從代碼中查看地址

?Sync and Watch Address? 插件在底層調(diào)用了一個(gè)名為 ?watchXxxAddress ?的云函數(shù),其中“?Xxx?”是這里的鏈名。 這些云函數(shù)也可以直接從自己的代碼中調(diào)用!

const results = await Moralis.Cloud.run("watchBscAddress", {
  address: "0x...",
});

默認(rèn)情況下,只有使用此云功能被監(jiān)視的地址所做的新交易才會(huì)被添加到數(shù)據(jù)庫中。 如果您還想為要查看的地址添加歷史數(shù)據(jù),可以添加 ?sync_historical:true?:

const results = await Moralis.Cloud.run("watchBscAddress", {
  address: "0x...",
  sync_historical: true,
});

監(jiān)視地址函數(shù)在開始作業(yè)時(shí)不返回任何值。 它們?nèi)匀皇钱惒降模?nbsp;一旦 ?promise返回同步的事務(wù),它們應(yīng)該在相應(yīng)鏈的 ?XxxTransactions ?表中。

取消監(jiān)視代碼中的地址

當(dāng)刪除某個(gè)地址上的同步和監(jiān)視地址插件時(shí),該插件會(huì)在后臺(tái)調(diào)用一個(gè)名為 ?unwatchXxxAddress ?的云函數(shù),其中“?Xxx?”是這里的鏈名。 和代碼看地址一樣,這個(gè)云函數(shù)也可以直接從自己的代碼中調(diào)用!

const results = await Moralis.Cloud.run("unwatchBscAddress", {
  address: "0x...",
});

未經(jīng)確認(rèn)的交易

測(cè)試網(wǎng)和主網(wǎng)上的交易可能需要一段時(shí)間才能得到確認(rèn)。 當(dāng) Moralis 檢測(cè)到處于未確認(rèn)狀態(tài)的新交易(或事件)時(shí),這些交易將被放入交易表中,例如 ?EthTransactions?,并帶有確認(rèn):?false?。 當(dāng)交易被確認(rèn)時(shí),狀態(tài)更新為已確認(rèn):?true?。

需要注意的是,不同的區(qū)塊鏈會(huì)有不同的確認(rèn)號(hào)來保證交易的有效性。 這意味著,為了讓交易將其在 ?DB ?中的確認(rèn)值更改為 ?true?,它需要一定數(shù)量的確認(rèn):

  • ?Ethereum?: 12
  • ?Polygon?: 100
  • ?BSC?: 18
  • ?Avalanche?: 100
  • ?Fantom?: 100

觸發(fā)器的后果

這意味著,如果您在具有已確認(rèn)屬性(如 ?EthTransactions?)或任何“同步和觀察合同事件”集合的集合上定義 ?afterSave ?觸發(fā)器,則觸發(fā)器可以被觸發(fā)兩次——一次為確認(rèn):false,再次為確認(rèn):true!

禁用用戶歷史同步

默認(rèn)情況下,Moralis 將自動(dòng)同步您用戶過去的所有交易。 這是非常耗費(fèi)資源的,CPU 和 RAM 可能是這里的瓶頸。 想象一下,你有 5000 個(gè)用戶,他們都有 100 次交易的歷史——突然你的服務(wù)器需要處理 500,000 個(gè)歷史事件,這將很快消耗 CPU 和 RAM 資源,特別是如果你有很多新用戶同時(shí)加入。

如果您知道不需要所有用戶的所有歷史記錄,則應(yīng)在服務(wù)器設(shè)置中禁用歷史同步。 見下圖。

screenaaa

通過 API 獲取歷史數(shù)據(jù)

請(qǐng)記住,禁用歷史同步僅意味著您的數(shù)據(jù)庫不會(huì)被歷史事件填充。

您仍然可以使用 Web3 API 函數(shù)獲取所有歷史數(shù)據(jù)。 Web3 API 完全獨(dú)立于數(shù)據(jù)庫的內(nèi)容。

因此,請(qǐng)查看 Web3 API 的功能,如果 Web3 API 中的歷史端點(diǎn)足以滿足您的用例,那么您應(yīng)該禁用服務(wù)器中的歷史同步,因?yàn)槟粫?huì)使用它。

什么時(shí)候不應(yīng)該禁用歷史同步?

如果您需要運(yùn)行 Web3 API 不提供的某些特定查詢,您需要啟用歷史同步,以便您可以使用 Moralis 提供的數(shù)據(jù)庫查詢對(duì)歷史數(shù)據(jù)運(yùn)行自定義查詢。

智能合約歷史事件仍然有效

請(qǐng)記住,此設(shè)置只會(huì)禁用自動(dòng)獲取用戶歷史記錄。 如果您添加了智能合約事件 - 它們?nèi)詴?huì)獲取歷史記錄并將該信息放入您的數(shù)據(jù)庫,因?yàn)樗鼈儶?dú)立于此設(shè)置工作。

優(yōu)化示例

在本節(jié)中,我們將給出具體的優(yōu)化示例,可以為您節(jié)省大量 CPU 和 RAM 使用率。

僅與您的合同相關(guān)的歷史和活動(dòng)

假設(shè)你有一個(gè) ?NFT ?合約,你只關(guān)心與該合約相關(guān)的用戶歷史和用戶實(shí)時(shí)交易。

在這種情況下,您應(yīng)該按照上面的說明禁用歷史同步,而只需為您的 ?NFT ?代幣合約添加智能合約事件同步。 這樣,您將只保留歷史記錄并查看智能合約的實(shí)時(shí)交易,而不是其他任何東西。

集合模式

Moralis Server 將獲得來自或向任何經(jīng)過身份驗(yàn)證的用戶地址(包括鏈接地址)或監(jiān)視地址進(jìn)行的所有價(jià)值轉(zhuǎn)移、代幣轉(zhuǎn)移 (ERC20) 和 ?NFT轉(zhuǎn)移(?ERC721?、?ERC1155?)。 在創(chuàng)建用戶(或查看地址)后,Moralis 服務(wù)器將為 Moralis 服務(wù)器同步的每個(gè)區(qū)塊鏈填充以下集合。 這些名稱將以它們來自的鏈作為前綴。

  • ?xxxTransactions?
  • ?xxxTokenTransfers?
  • ?xxxTokenBalances?
  • ?xxxNFTTransfers?
  • ?xxxNFTOwners?

這些集合可以在“?Moralis Dashboard?”中查看。

鏈前綴

 Chain  Prefix
 Ethereum Mainnet, Ropsten, Georli, Kovan, Local Devchain  ?Eth?
 Binance Smart Chain Mainnet, Testnet  ?Bsc?
 Polygon (Matic) Mainnet, Mumbai Testnet  ?Matic?
 Elrond  ?Erd?

交易

在該鏈上與用戶或受監(jiān)視地址之間的所有交易不包括智能合約內(nèi)的內(nèi)部轉(zhuǎn)賬,例如代幣轉(zhuǎn)賬。

{
    "objectId": String,
    "block_hash": String,
    "gas_price": Number,
    "block_timestamp": Date,
    "receipt_cumulative_gas_used": Number,
    "ACL": ACL,
    "receipt_gas_used": Number,
    "input": String,
    "receipt_contract_address": String,
    "hash": String,
    "updatedAt": Date,
    "nonce": Number,
    "to_address": String,
    "transaction_index": Number,
    "value": String,
    "gas": Number,
    "receipt_status": Number,
    "createdAt": Date,
    "block_number": Number,
    "from_address": String,
    "confirmed": Boolean,
}

代幣轉(zhuǎn)移

用戶地址和監(jiān)視地址的所有 ERC20 代幣轉(zhuǎn)移事件都將在此處找到。

{
    "objectId": String,
    "block_hash": String,
    "block_timestamp": Date,
    "ACL": ACL,
    "updatedAt": Date,
    "token_address": String,
    "transaction_hash": String,
    "to_address": String,
    "transaction_index": Number,
    "value": String,
    "log_index": Number,
    "createdAt": Date,
    "block_number": Number,
    "from_address": String,
    "confirmed": Boolean,
}

代幣余額

用戶和觀察地址代幣余額的摘要。 這將在進(jìn)行新交易時(shí)實(shí)時(shí)更新。

{
  "objectId": String,
  "decimals": String,
  "contract_type": String,
  "ACL": ACL,
  "name": String,
  "updatedAt": Date,
  "token_address": String,
  "address": String,
  "symbol": String,
  "createdAt": Date,
  "block_number": Number,
  "balance": String,
}

NFT轉(zhuǎn)賬

轉(zhuǎn)移用戶和觀察地址的 ?NFT?(?ERC721 ?和 ?ERC1155 ?代幣)事件。

{
  "objectId": String,
  "block_hash": String,
  "token_id": String,
  "block_timestamp": Date,
  "contract_type": String,
  "ACL": ACL,
  "updatedAt": Date,
  "token_address": String,
  "transaction_hash": String,
  "to_address": String,
  "transaction_index": Number,
  "log_index": Number,
  "amount": String,
  "createdAt": Date,
  "block_number": Number,
  "transaction_type": String,
  "from_address": String,
  "confirmed": Boolean,
}

NFTO所有者

用戶和觀察地址的 ?NFT ?余額(?ERC721 ?和 ?ERC1155 ?代幣)摘要。

{
  "objectId": String,
  "token_id": String,
  "owner_of": String,
  "token_uri": String,
  "contract_type": String,
  "ACL": ACL,
  "name": String,
  "updatedAt": Date,
  "token_address": String,
  "amount": Sring,
  "symbol": String,
  "createdAt": Date,
  "block_number": Number,
}


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

掃描二維碼

下載編程獅App

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

編程獅公眾號(hào)