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