首页 > 解决方案 > 使用谷歌云功能将令牌转移给用户

问题描述

当他们创建帐户时,我正在将代币转移到用户的钱包中。为此,我正在使用谷歌云功能。

在这里,在帐户创建事件中,代币将被转移到该地址。我的云功能工作正常,但令牌传输功能没有被触发。这是代码-

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();
};

我已将合约部署在专用网络上。

标签: node.jsgoogle-cloud-firestoregoogle-cloud-functionsethereumweb3js

解决方案


您调用的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 日志中。


推荐阅读