首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >内网交易账户余额为零

内网交易账户余额为零
EN

Stack Overflow用户
提问于 2018-04-05 07:09:33
回答 1查看 233关注 0票数 0

编辑:已解决,是由声明this.web3而不是web3引起的

我正在使用松露运行一个私有网络,我面临着一个奇怪的问题,在Metamask和Mist显示我有100 eth的余额。当我实际尝试进行交易时,系统显示该帐户的eth为零。我有一份相当复杂的合同,我不确定问题出在哪里。

我已经尝试了几次重启truffle、重新编译和重新迁移契约,并且我已经多次重新安装了metamask。当我尝试使用Mist时,它也会这样做。

我在智能合约方面是个新手,但我正尝试用它来创建一个比较大的应用程序。我对合约进行了可靠的编码,并且我已经在混搭上测试了合约,没有问题,而且我可以通过松露很好地操纵合约。我想可能是因为前面的原因..我正在用react对它进行编程。这是我在js中调用函数的特定代码部分。这只是一个简单的身份验证机制。我使用松露合约,而this.database是一种合约。

代码语言:javascript
复制
authAddress(sotu, password) {
    return new Promise ((resolve, reject) => {
        this.database.deployed().then(instance => {
            return instance.authAddress(sotu, password);
        }).then(res => {
            resolve();
        }).catch(error => {
            reject(error);
        });
    });
}

对应的实心度如下:

代码语言:javascript
复制
function authAddress(string sotu, string password) public {
    //Check if already logged in
    require(authenticatedAddresses[msg.sender] == address(0));
    Person p = persons[keccak256(sotu)];
    p.login(keccak256(password), msg.sender);
    authenticatedAddresses[msg.sender] = p;
}

我还在学习这些东西,但让我有点沮丧的是这个问题的存在,而且就我所尝试的搜索而言,似乎没有其他人反对过这个问题。我是不是完全漏掉了什么?

编辑:

下面是web3提供程序的初始化:

代码语言:javascript
复制
    try {
        if(web3 != null) {
            this.web3 = new Web3(web3.currentProvider);
        }
    } catch (error) {
        this.web3 = null;
    }

我试着让这个网站只有在你有metamask或类似的时候才可用。我很想把web3封装到一个类中,但是如果这样做搞砸了,请让我知道。

我的数据库处理程序初始化

代码语言:javascript
复制
initDatabaseHandler() {
    return new Promise((resolve, reject) => {
        this.databaseHandler = new DatabaseHandler();
        this.databaseHandler.loadContract(this.state.coinbase, this.web3.currentProvider)
        .then(() => {
            this.databaseHandler.getAccountInfo()
            .then(info => {
                this.setState({userinfo: info}, resolve());
            }).catch(err => {
                console.log(err);
            });
        })
        .catch(err => reject(err));

    });
}

和抽象的契约加载器:

代码语言:javascript
复制
loadContract(coinbase, provider) {
    return new Promise((resolve, reject) => {
        this.database = new Contract(Database);
        this.database.setProvider(provider);
        this.database.web3.eth.defaultAccount = coinbase;

        this.person = new Contract(Person);
        this.person.setProvider(provider);
        this.person.web3.eth.defaultAccount = coinbase;

        console.log(this.database.web3.eth.defaultAccount);
        resolve();

    });
}
EN

回答 1

Stack Overflow用户

发布于 2018-04-05 16:01:27

已解决,由声明this.web3而不是web3引起

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49661781

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档