Solidity

解鎖遠端帳戶

  • July 26, 2017

我部署了接受資金的智能合約(通過備份功能function() payable { ... })。我也有使用 web3 發送資金的前端。

當我使用本地節點(以及本地呈現的 JSON 錢包)對其進行測試時,一切正常 -web3.personal.unlockAccount(account, password)使用使用者提供的數據解鎖帳戶,然後將資金發送到合約。

現在我geth在獨立 VPS 上部署了節點並使用程式碼連接到它:

var Web3 = require('web3');
this.web3 = new Web3();
this.web3.setProvider(new Web3.providers.HttpProvider('http://my-node-addr.net:18545/'));

if(this.web3.isConnected()) {
 console.log('web3 connected');
} else {
 console.log('web3 NOT connected');
}

它表明客戶端連接成功。但是當我嘗試發送資金時,程式碼線上失敗

web3.personal.unlockAccount(account, password);

有錯誤Error: no key for given address or file。當然,我的節點不能包含所有客戶端的錢封包件(沒有人想上傳它)。

這是我發送交易的方式:

this.contract.sendTransaction({ from: account, value: amount, gas: 400000 })
.then(() => {
   // OK, everything fine!
})
.catch(error => {
   // I am here
   console.log('Oops...', 'Error happened during your payment: ' + error, 'error');
});

UPD:我想要的:提供帶有“帳戶”、“密碼”和“金額”欄位的 html 頁面,允許使用者將乙太幣發送到預定義的地址。當然我的節點不會有UTC-.....文件(錢包)。

該方法sendTransaction有效,因為 geth 可以訪問私鑰。在您的場景中,由於私鑰在客戶端 geth 中,因此無法訪問它,也無法簽署交易。

您需要在客戶端簽署交易並用於sendRawTransaction廣播您簽署的交易。你可以使用eth-lightwallet來管理客戶端的密鑰,如果你想要更底層的東西,你可以使用ethereumjs-tx來創建和簽署你自己的交易。

引用自:https://ethereum.stackexchange.com/questions/22993