Avatar
0
monkey Enlightened
monkey Enlightened
Sử dụng smart contract trong mạng etherum với web3js
Giả sử contract của chúng ta có nội dung thế này:

// SPDX-License-Identifier: MIT
pragma solidity >=0.4.22 <0.9.0;

contract Migrations {
    
    string public _message;
    uint public _last_completed_migration;
    
    function Hello() public{
        _message = "Hello World!";
    }

    function setCompleted(uint completed) public {
        _last_completed_migration = completed;
    }
    
    function message() public view returns(string memory) {
        return _message;
    }
    
    function lastCompletedMigration() public view returns (uint) {
        return _last_completed_migration;
    }
}

Và chúng ta đã deploy contract truffle ở lần trước rồi nhé.

  1. Để sử dụng smart contract cho mục đích cá nhân hoặc test chúng ta có thể sử dụng truffle console:

    1. Chạy lệnh: truffle console cho mạng private hoặc truffle console --network ropsten (xem danh sách các network trong file truffle-config.js)
    1. Chạy các lệnh sau trong console:

let contract = await Migrations.deployed()
contract.Hello()
contract.message()

    1. Kết quả chúng ta nhận được: 'Hello World!'

  1. Tuy nhiên thường thì muốn làm ứng dụng để phục vụ cho nhiều người, trong đó có các ứng dụng web, chúng ta có thể sử dụng web3.js. Ở đây mình sẽ viết ứng dụng node.js chạy console cho đơn giản:

  1. 1 Khởi tạo project node js với file package.json thế này:

{
    "name": "eth-webb3js",
    "version": "1.0.0",
    "dependencies": {
        "fs": "0.0.1-security",
        "web3": "^1.6.0"
    },
    "scripts": {
        "start": "node main.js"
    }
}

  1. 2 Tạo file main.js thế này:

const Web3 = require('web3');
const fs = require('fs');

let provider = new Web3.providers.HttpProvider("http://localhost:8545/");
let web3 = new Web3(provider);
web3.eth.defaultAccount = "0xa9f6009507ef930c67b98f7a12cb0ca4321aaadb"; // change by your contract address not account address

let contractJson = fs.readFileSync("../truffle/build/contracts/Migrations.json").toString().trim();
let abi = JSON.parse(contractJson).abi;

web3.eth.personal.unlockAccount("0x3c31b4b9d6c24bad29498f99aaa6914231362c7f", "123", 600) // change by your account address
                 .then(console.log('Account unlocked!'));

let contract = new web3.eth.Contract(abi, web3.eth.defaultAccount);
contract.methods.Hello().call().then(console.log);
contract.methods.message().call().then(console.log);

  1. 3 Sau khi setup xong, chúng ta sẽ có cấu trúc thư mục thế này:

  1. 4 Chạy lệnh npm start và chúng ta sẽ được kết quả thế này:

> node main.js

Account unlocked!
Result {}
Hello World!
  • Answer
blockchain ethereum smart contract web3
Remain: 5
1 Answer
Avatar
monkey Enlightened
monkey Enlightened
Tham khảo:

  1. https://web3js.readthedocs.io/en/v1.5.2/web3-eth-contract.html#contract-call
  2. https://web3js.readthedocs.io/en/v1.2.11/web3-eth-personal.html
  • 0
  • Reply