Web3 отправляет контрактные методы без метамаски

#node.js #blockchain #web3 #metamask

#node.js #блокчейн #web3 #метамаска

Вопрос:

У меня есть вопрос по моей программе Node-js, мне нужно перевести транзакцию с адреса моей учетной записи на адрес контракта. И это мой код контракта:

 contract price{
    
    address owner;

    constructor() public{
        owner = msg.sender;
    }

    struct pricedata{
        uint highprice;
        uint lowprice;
        uint avgprice;
    }
    
    mapping(uint => pricedata) PD;
    
    modifier onlyowner(){
        require(msg.sender == owner);
        _;
    }

    function set(uint _ID, uint _highprice, uint _lowprice, uint _avgprcie) public onlyowner{
        PD[_ID] = pricedata({
            highprice : _highprice,
            lowprice : _lowprice,
            avgprice : _avgprcie
        });
    }

    function get(uint _ID) public view returns (uint _highprice, uint _lowprice, uint _avgprcie){
        pricedata memory pd = PD[_ID];
        return (pd.highprice, pd.lowprice, pd.avgprice);
    }
}

 

И это мой код node-js:

 state = {web3: null, accounts: null, contract: null ,info:null ,lowprice : 0, highprice : 0, avgprice : 0};
componentDidMount = async () => {
            const web3 = await getWeb3();
            
            const accounts = await web3.eth.getAccounts();
            const balances  = await web3.eth.getBalance(accounts[0]);
            var bal = web3.utils.fromWei(balances, 'ether');

            this.setState({account : accounts[0], balance : bal});

            const networkId = await web3.eth.net.getId();
            const deployedNetwork = SimpleStorageContract.networks[networkId];

            const instance = new web3.eth.Contract(
              SimpleStorageContract.abi,
              deployedNetwork amp;amp; deployedNetwork.address,
            );
          
            this.setState({ web3, accounts, contract: instance });

            this.runExample();
}

  runExample = async () => {
      const low = 0 | this.state.lowprice*100;
      const high = 0 | this.state.highprice*100;
      const avg = 0 | this.state.avgprice*100;
      const ran = this.state.randomnumber;
      console.log("test:",low,high,avg,ran);
      this.state.contract.methods.set(ran, low, high, avg).send({
          from : this.state.accounts[0]
      });
  };
 

Я хочу выполнить транзакцию без метамаски, я хочу автоматически нажать кнопку подтверждения, синюю:

введите описание изображения здесь

как я могу выполнить свою функцию this.state.contract.methods.set ?

Я использую Ganache для настройки своего ethereum.

Я не публиковал здесь весь свой код, если вам нужна дополнительная информация, пожалуйста, сообщите мне, и я ее заполню.

Ответ №1:

Вы можете импортировать свою учетную запись Ethereum в Web3.js . Тогда вам не нужно подтверждать каждую транзакцию с помощью Metamask.

 const ganache = require('ganache-cli');
const Web3 = require('web3');

//ganache client running on port 7545
var web3 = new Web3(new Web3.providers.HttpProvider('http://localhost:7545'));

const getAccounts = async () => {

    //To get accounts with private key
    let account = await web3.eth.accounts.privateKeyToAccount('0x' privateKey);
    //privateKey is the key that you get from Ganache client
}

getAccounts();