我正在创建一个抽奖网站。用户连接钱包并支付一张抽奖票。在区块链交易确认后,我将他的抽奖票添加到了一家百货公司的收藏中。
这会导致安全问题,因为如果我允许用户在我的防火墙安全规则中写入抽奖票集合,他可以创建自己的票而不付费。
我需要入场券添加到数据库,只有当付款已成功完成。
我不知道那些有支付手段的网站是如何做到的。也许火基地不是一个好的解决方案?
我的项目在反应/打字稿中。
发布于 2022-05-23 19:20:31
你说你是通过区块链付款的,我想你是用稳健作为你的聪明的合同语言?
(未经测试的)样本代码:
如何在稳定的情况下发出事件? (raffle.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)
}
})或者(如果你不想处理区块链上的付款),你也可以看看条状,它也有一个防火墙插件,以便于集成。(但我从未试过)。然而,海事组织使用区块链处理付款将是最清洁的解决办法。(+你没有条条所用的手续费)。
我希望我能给你一些好线索!火力基地应该是绝对适合这一点。
https://stackoverflow.com/questions/72353452
复制相似问题