Как мне вызвать функцию смарт-контракта через web3 js? - PullRequest
0 голосов
/ 11 апреля 2019

Так что я очень новичок в разработке Blockchain.

Я развернул очень простой Smart Contract в тестовой сети Ropsten. Я разрабатываю интерфейс и отсюда хочу вывести ether / wei с адреса контракта, на счет, вызывающий функцию (введенная метамаска). Он отлично работает, когда я перехожу на etherscan к своему контракту и напрямую использую функцию изъятия. Я просто не знаю, как правильно вызвать функцию вывода через web3 js. Ниже приведено сообщение об ошибке, возникающее при попытке вызвать функцию / метод. Может ли кто-нибудь помочь направить меня в правильном направлении? Спасибо!

Ошибки выброшены .. https://imgur.com/a/RSVrJIF


Web3 = require('web3');

if (typeof web3 != 'undefined')
{
    web3 = new Web3(web3.currentProvider);
    console.log("existing web3: provider " + typeof web3);
    console.log(web3.currentProvider);
}
else{
    //To Do..
    web3 = new Web3(new Web3.providers.HttpProvider("https://ropsten.infura.io/"));
    console.log("new provider " + web3);
}

console.log(web3.isConnected());
console.log(web3.eth.accounts[0]);

abi = JSON.parse('[{"constant":false,"inputs":[{"name":"amount","type":"uint256"}],"name":"withdraw","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getMyBalance","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"deposit","outputs":[],"payable":true,"stateMutability":"payable","type":"function"}]');
var bankContract = web3.eth.contract(abi);
contractInstance = bankContract.at('myaddressishere');
console.log (contractInstance);

function withdraw() {
    contractInstance.withdraw(300000000000000000, { from: web3.eth.accounts[0]})
}
pragma solidity ^0.5.0;

contract Bank{
    mapping(address=>uint) balances;

    function deposit() public payable{
        balances[msg.sender]+=msg.value;
    }
    function withdraw(uint amount) public{
        if(balances[msg.sender]>=amount){
            balances[msg.sender]-=amount;
            msg.sender.transfer(amount);
        }
    }
}
...