node.js - 使用谷歌云功能将令牌转移给用户
问题描述
当他们创建帐户时,我正在将代币转移到用户的钱包中。为此,我正在使用谷歌云功能。
在这里,在帐户创建事件中,代币将被转移到该地址。我的云功能工作正常,但令牌传输功能没有被触发。这是代码-
const admin = require('firebase-admin');
const functions = require('firebase-functions');
var Web3 = require('web3');
admin.initializeApp(functions.config().firebase);
var web3 = new Web3(new
Web3.providers.HttpProvider("http://localhost:8545"));
var Personal = require('web3-eth-personal')
var personal = new Personal(Personal.givenProvider)
var ABI = [{'contract ABI'}]
var contract =new web3.eth.Contract(ABI, '0xF62E0..fd44fC931571ae957')
exports.newUser = (event, callback) => {
const triggerResource = event.resource;
web3.eth.personal.unlockAccount("0xc..9050f547", "password", 60, (unlock) => {
contract.methods.transfer('0x4..bB7d982D8A8632e', 2).
send({
from: '0xC3Fe4...0F547',
gas: 210000
}, (error, txhash) => {
if (!error && txhash) {
console.log(triggerResource);
}
});
})
callback();
};
我已将合约部署在专用网络上。
解决方案
您调用的send()
方法似乎是异步的,但您在回调完成之前调用了它。要解决此问题,请将调用移至完成callback()
后运行的代码块send()
:
exports.newUser = (event, callback) => {
const triggerResource = event.resource;
web3.eth.personal.unlockAccount("0xc..9050f547", "password", 60, (unlock) => {
contract.methods.transfer('0x4..bB7d982D8A8632e', 2).
send({
from: '0xC3Fe4...0F547',
gas: 210000
}, (error, txhash) => {
if (!error && txhash) {
console.log(triggerResource);
}
callback(error);
});
})
};
您会看到代码现在还将 传递给error
回调,这意味着它将显示在您的 Cloud Functions 日志中。
推荐阅读
- twilio - POST 调用的 Twilio 回调签名验证始终失败
- excel - 通过浏览按钮将文件传输到网页
- c++ - 如何在 C++ 中使用内联汇编来设置陷阱标志
- typescript - 在 TypeScript 中建模权限树
- php - 创建流代理
- python - Pandas Series.interpolate in time 是如何工作的?
- c++ - 如何通过带有指针的函数传递 char 变量(示例已发送)?
- javascript - 在图表中显示低于或高于阈值的区域在 D3 中不起作用
- c# - 对于嵌入在 android 中的统一应用程序,如何修复 ClassNotFoundException?
- php - 需要使用 php mailer 从 gmail 发送邮件而不启用“不太安全的应用程序”并生成“应用程序密码”