簡體   English   中英

嘗試在專用網絡上進行交易時,帳戶余額為零

[英]Account balance zero when trying to make an transaction on private network

編輯:解決,是由聲明this.web3而不是web3引起的

我正在運行帶有松露的專用網絡,並且遇到了這個奇怪的問題,在Metamask和Mist處顯示我的平衡為100 eth。 當我實際嘗試進行交易時,它說該帳戶具有零eth。 我的合同相當復雜,我不確定是什么問題。

我嘗試幾次重新啟動松露,重新編譯和遷移合同,並且多次重新安裝了metamask。 當我嘗試Mist時,它也會這樣做。

我在智能合約方面還很陌生,但是我正在嘗試用它創建一個更大的應用程序。 我使用Solidity對合同進行編碼,並且已經對混音中的合同進行了測試,沒有任何問題,並且可以通過松露操作合同。 我認為可能是因為前端。我正在用react編程。 這是我稱為js的代碼中的特定部分。 這只是一種簡單的身份驗證機制。 我使用松露合約,this.database是合約。

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

堅固性對應如下:

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提供程序init:

    try {
        if(web3 != null) {
            this.web3 = new Web3(web3.currentProvider);
        }
    } catch (error) {
        this.web3 = null;
    }

我嘗試僅當您具有metamask或類似標記時才使該站點可用。 我想將web3包裝到一個類中,但是如果這使uo搞砸了,請告訴我。

我的數據庫處理程序初始化

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

    });
}

和抽象的合同加載器:

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

    });
}

解決,是由於聲明了this.web3而不是web3

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM