您可以獲取所有歷史交易并實(shí)時(shí)收聽新交易。 它需要以下信息:
ChainId
?(必填):要同步的鏈Address
?(必填):您將為此事件收聽的地址。Sync_historical
?(可選):同步歷史數(shù)據(jù)選項(xiàng)。 默認(rèn)值true
如果創(chuàng)建的同步作業(yè)會(huì)導(dǎo)致檢索更多歷史事件,則?Sync_historical
?選項(xiàng)將被禁用并且不會(huì)保存歷史數(shù)據(jù)??梢月?lián)系支持人員升級(jí)您的帳戶以啟用保存它,無論如何,但在這樣做之前要仔細(xì)考慮是否真的有必要??梢詫?shí)時(shí)處理事件而無需將數(shù)據(jù)保存到數(shù)據(jù)庫中。
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ù)庫查詢即可獲取用戶的所有最新交易和余額。
默認(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
?表中。
當(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...",
});
測(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
?: 12Polygon
?: 100BSC
?: 18Avalanche
?: 100Fantom
?: 100這意味著,如果您在具有已確認(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è)置中禁用歷史同步。 見下圖。
請(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ì)使用它。
如果您需要運(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è)置工作。
在本節(jié)中,我們將給出具體的優(yōu)化示例,可以為您節(jié)省大量 CPU 和 RAM 使用率。
假設(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,
}
用戶地址和監(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,
}
轉(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,
}
用戶和觀察地址的 ?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,
}
更多建議: