Solidity
解鎖遠端帳戶
我部署了接受資金的智能合約(通過備份功能
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來創建和簽署你自己的交易。