使用Google Cloud功能将令牌转移给用户

时间:2019-01-22 12:47:26

标签: node.js google-cloud-firestore google-cloud-functions ethereum web3js

我在用户创建帐户时将令牌转移到用户的钱包。为此,我正在使用谷歌云功能。

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

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

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

1 个答案:

答案 0 :(得分:0)

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