首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有价证券规则及付款表格

有价证券规则及付款表格
EN

Stack Overflow用户
提问于 2022-05-23 18:43:50
回答 1查看 61关注 0票数 1

我正在创建一个抽奖网站。用户连接钱包并支付一张抽奖票。在区块链交易确认后,我将他的抽奖票添加到了一家百货公司的收藏中。

这会导致安全问题,因为如果我允许用户在我的防火墙安全规则中写入抽奖票集合,他可以创建自己的票而不付费。

我需要入场券添加到数据库,只有当付款已成功完成。

我不知道那些有支付手段的网站是如何做到的。也许火基地不是一个好的解决方案?

我的项目在反应/打字稿中。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-05-23 19:20:31

你说你是通过区块链付款的,我想你是用稳健作为你的聪明的合同语言?

  1. 你为什么不在智能契约中发出事件。
  2. 然后在(单独的)服务器上使用倾听这些事件
  3. 每当发出事件时,都会更新(firebase)数据库。

(未经测试的)样本代码:

如何在稳定的情况下发出事件? (raffle.sol)

代码语言:javascript
复制
// 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时:

代码语言:javascript
复制
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中,它将是这样的。

代码语言:javascript
复制
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)
    }
})

或者(如果你不想处理区块链上的付款),你也可以看看条状,它也有一个防火墙插件,以便于集成。(但我从未试过)。然而,海事组织使用区块链处理付款将是最清洁的解决办法。(+你没有条条所用的手续费)。

我希望我能给你一些好线索!火力基地应该是绝对适合这一点。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72353452

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档