【发布时间】:2018-07-14 20:06:36
【问题描述】:
我想在我的 dapp 中实现一个流程,我希望能得到一些意见。
流程:
用户看到一个产品列表并选择一个购买它。用户的元掩码已解锁并且有足够的余额。
设置:
Rails 后端,React 前端,ganache-cli,truffle,metamask (web3js)。
数据库结构:
在应用程序的内部 PostgresDB 中,有一个 products 表。在区块链中,有一个动态数组products,如下所示:
内部 Postgres:
products
name
price
owner_id
owners
name
id
address
区块链(合约存储)
Product[] products
struct Product {
name
}
mapping(uint => address) public productIdToOwner;
mapping(uint => uint) public productIdToPrice;
以下函数onBuy在用户点击“购买此产品”按钮时运行:
onBuy = (product) => {
const { id, external_id, name, price, meta } = product
this.ContractInstance.methods.buy(external_id).send({
from: this.state.currentUserAddress,
gas: GAS_LIMIT,
value: web3.utils.toWei(price.toString(), "ether"),
}).then((receipt) => {
// What to do before getting a receipt?
console.log(receipt)
}).catch((err) => {
console.log(err.message)
})
}
问题:
在主网上,我需要多长时间才能获得交易收据?在单击带有加载轮的
onBuy按钮直到收据到达后让用户在同一页面上等待是否明智?如果不是,传统的处理方法是什么?我的数据库结构是连接区块链的合理方式吗?我担心数据完整性(即必须在我的内部数据库和区块链之间同步
address字段),但我发现将区块链数据存储在内部数据库中很有用,并且主要从内部数据库而不是区块链读取。
【问题讨论】: