我正在創建一個抽獎網站。用戶連接他的錢包并支付抽獎券。區塊鏈交易確認后,我將他的抽獎券添加到 firestore 的收藏中。
這會導致安全問題,因為如果我允許用??戶在我的 firebase 安全規則中寫入抽獎券集合,他可以創建自己的彩票而無需付費。
僅當付款成功后,我才需要將門票添加到資料庫中。
我不知道有支付方式的網站是如何做到的。也許firebase不是一個好的解決方案?
我的專案在反應/打字稿中。
uj5u.com熱心網友回復:
你說你通過區塊鏈進行支付,我假設你使用solidity作為你的智能合約語言?
- 為什么不在智能合約中發出事件?
- 然后,您在(單獨的)服務器上偵聽這些事件。
- 每當發出事件時,它都會更新您的(firebase )資料庫。
(未經測驗)示例代碼:
你如何在solidity中發出事件?(抽獎.sol)
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
contract Raffle {
event PaymentCompletion(address buyer, uint256 amountOfTickets);
function buyTickets() external payable {
emit PaymentCompletion(msg.sender, msg.value)
}
}
你如何聆聽這些事件? 使用 web3js 時:
const contract = new web3.eth.Contract(CONTRACT_ABI, CONTRACT_ADDRESS);
const lastBlock = await web3.eth.getBlockNumber()
// paymentEvents is an array containing the payments of the last 500 blocks.
const paymentEvents = await contract.getPastEvents(
'PaymentCompletion', // change if your looking for a different event
{ fromBlock: latestBlock - 500, toBlock: 'latest' }
);
現在遍歷這些事件并將它們放入您的資料庫中。您還可以設定訂閱,在創建新塊時通知您,這樣您就可以檢查新事件是否在當前塊內。
如果您將第一個區塊鏈事件添加到 firebase ,這就是它的樣子realtime database。
var db = admin.database();
var ref = db.ref("/payments");
// ...
ref.child("path/to/transaction").set({
buyer: paymentEvents[0].buyer,
amountOfTickets: paymentEvents[0].amountOfTickets,
// put the rest of your data here
}, (err) => {
if (err) {
console.error(err)
}
})
或者(如果你不想在區塊鏈上處理付款)你也可以看看stripe,它還有一個易于集成的 firebase 插件。(但我從未嘗試過)。但是,imo 使用區塊鏈處理付款將是最干凈的解決方案。( 您沒有條紋使用的手續費)。
我希望我能給你一些好的線索!Firebase 應該絕對適合這個。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/481035.html
標籤:反应 打字稿 谷歌云火库 firebase-安全
上一篇:如何在打字稿中使用引數的typeof值覆寫泛型型別的屬性
下一篇:將型別分配給動態訪問的物件值
