它错过solidity活动的可能性有多大



嗨,我正在制作一个依赖区块链事件的金融应用程序,基本上,我使用web3js根据收到的事件更新我的数据库,当用户要求我用私钥签署合同时,我可以给用户钱。

我唯一关心的是我能依靠事件吗?比如我会错过活动吗?

这是我这样做的代码:

const contract = new web3.eth.Contract(abi, contract_address)
const stale_keccak256 = "0x507ac39eb33610191cd8fd54286e91c5cc464c262861643be3978f5a9f18ab02";
const unStake_keccak256 = "0x4ac743692c9ced0a3f0052fb9917c0856b6b12671016afe41b649643a89b1ad5";
const getReward_keccak256 = "0x25c30c62c42b51e4f667b70ef60f1f683c376f6ace28312ed45a40665e01af37";
let userRepository: Repository<UserData> = connection.getRepository(UserData);
let globalRepository: Repository<GlobalStakingInfo> = connection.getRepository(GlobalStakingInfo);
let userStakingRepository: Repository<UserStakingInfo> = connection.getRepository(UserStakingInfo);
let transactionRepository: Repository<Transaction> = connection.getRepository(Transaction);
const topics = []
web3.eth.subscribe('logs', {
address: contract_address, topics: topics
},
function (error: Error, result: Log) {
if (error) console.log(error)
}).on("data", async function (log: Log) {

let response: Boolean = false;
try {
response = await SaveTransaction(rpc_url, log.address, log.transactionHash, transactionRepository)
} catch (e) {
}

if (response) {
try {
let global_instance: GlobalStakingInfo | null = await globalRepository.findOne({where: {id: 1}})
if (!global_instance) {
global_instance = new GlobalStakingInfo()
global_instance.id = 1;
global_instance = await globalRepository.save(global_instance);
}
if (log.topics[0] === stale_keccak256) {
await onStake(web3, log, contract, userRepository, globalRepository, userStakingRepository, global_instance);
} else if (log.topics[0] === unStake_keccak256) {
await onUnStake(web3, log, contract, userStakingRepository, userRepository, globalRepository, global_instance)
} else if (log.topics[0] === getReward_keccak256) {
await onGetReward(web3, log, userRepository)
}
} catch (e) {
console.log("I MADE A BOBO", e)
}
}
}
)

代码有效,我只是担心我是否会错过一个活动?因为财务是相关的,如果错过活动是一件事,人们会赔钱。请告知

您可以通过添加更多连接到其他节点的侦听器实例来增加冗余。

还可以通过轮询过去的日志-再次建议使用单独的节点。

让多个实例做几乎相同的事情会导致传入数据的倍增,所以不要忘记只存储唯一的日志。这可能有点棘手,因为理论上一个事务ID可以产生两次相同的日志(例如通过多呼叫(,因此唯一密钥可以是事务ID和日志索引的组合(每个块唯一(。

相关内容

  • 没有找到相关文章

最新更新