Ich lerne Solidität. Ich habe Metamask, truffle und testrpc eingerichtet. Ich kann Ether per Metamaske von einem Konto zum anderen senden. Aber ich möchte mit Metamask auf meinen bereitgestellten Vertrag zugreifen und meine Vertragsfunktionen aufrufen.
Frage : Kann ich meinen bereitgestellten Vertrag mithilfe von Metamask testen und damit interagieren?
Verwenden Sie Metamask nicht allein, aber Sie können es in Kombination mit anderen Tools verwenden. Ein solches Tool ist MyEtherWallet ; Gehen Sie zur Registerkarte „Verträge“, geben Sie die Vertragsadresse und ABI ein, klicken Sie auf Zugriff und wählen Sie dann „Metamask/Mist“ als Mittel, mit dem Sie auf Ihre Brieftasche zugreifen möchten. Dann gibt Ihnen MyEtherWallet die Benutzeroberfläche, um die Transaktion zu erstellen, und wenn es Zeit ist, sie zu senden, gibt es Ihnen ein Metamask-Popup, um sie zu signieren und zu übertragen.
Metamask eignet sich hervorragend für clientseitige Interaktionen mit Smart Contracts und deren Funktionen. Wenn installiert, können Sie auf das web3 zugreifen, das in Ihren Browser eingefügt wird:
// Get the contract instance using your contract's abi and address:
const contractInstance = web3.eth.contract(abi).at(contractAddress);
// Call a function of the contract:
contractInstance.someFunction({ from: sender, value: someValue, gas: limit },
(err, res) => { /** do something with results **/ });
Sie können sogar auf das aktuell ausgewählte Konto in der Metamaske mit zugreifen web3.eth.accounts[0]
.
Dies erfordert etwas Front-End-Entwicklung, aber es ist ziemlich einfach.
Die andere Alternative ist die Verwendung von Ethereum Wallet > Contracts > Watch Contract. Geben Sie erneut die Vertragsadresse und abi ein, und Sie können über die Benutzeroberfläche von Ethereum Wallet auf alle Funktionen des Vertrags zugreifen.
Beispiel:
web3 = new Web3(web3.currentProvider);
let myContract = new web3.eth.Contract(abi, address);
let amount = 1;
amount = web3.utils.toWei(amount.toString(), 'ether');
let response = await myContract.methods
.createPayment(1, address) //function in contract
.send({
from: window.web3.currentProvider.selectedAddress,
to: address,
value: amount,
gasPrice: '20000000000'
});
console.log("response: ", response);
MyEtherWallet und Mist Wallet sind beide jetzt veraltet .
Eine der besten Alternativen dazu ist MyCrypto Wallet. Es wird auch von den MEW- und Nebelentwicklern empfohlen . Es verfügt über eine vereinfachte Web-Benutzeroberfläche , und es sind auch Desktop-Versionen verfügbar.
Dies funktioniert im Jahr 2022, ändern Sie das abi
und address
und fügen Sie es in Ihre HTML-Datei ein:
async function loadWeb3() {
if (window.ethereum) {
window.web3 = new Web3(window.ethereum);
window.ethereum.enable();
}
}
async function loadContract() {
let abi = [] // your abi here
let address = "0xa1b2c3d4..." // your contract address here
return await new window.web3.eth.Contract(abi, address);
}
async function getCurrentAccount() {
const accounts = await ethereum.request({ method: 'eth_requestAccounts' });
return accounts[0];
}
async function run() {
await loadWeb3();
window.contract = await loadContract();
const account = await getCurrentAccount();
let result = await window.contract.methods.mint().send({ from: account });
}
if (typeof window.ethereum !== 'undefined') {
run()
}
Ja.
MitternachtBlitz
Erdbeere
MitternachtBlitz