truffle的使用,你还不会这样用吗?

文章 , 技术分享
178 0

与合约互动

Truffle 提供命令行工具,执行 truffle console 命令后,可用Javascript 来和刚刚部署的合约互动:

$ cd ..
$ truffle console
$ Demo.deployed().then(instance => c = instance)

与合约互动

与合约互动

讲解:

 Demo.deployed().then(instance => c = instance)

truffle console 中预载了 truffle-contract 函数库,以方便操作部署到区块链上的合约。
这边使用 Demo.deployed().then 语句来取得 Demo合约的 Instance(实例),并存到 contract 变量中,以方便后续的调用,比如合约中有个say()方法,就可以使用c.say()进行调用

new

truffle 的新写法,使用new进行创建合约

truffle 的新写法,使用new进行创建合约

call

在Solidity中,.call是一个特殊的函数调用方式,用于调用智能合约的可视和纯函数(view和pure函数)。在你提供的代码中,.call是JavaScript中的一个方法,用于使用web3.js库来调用以太坊智能合约的函数。.call方法可用于对智能合约的可视和纯函数进行只读调用,不会修改区块链状态,也不会消耗Gas。具体而言,.call方法通过调用智能合约的视图函数返回一个Promise对象,该Promise对象可以异步返回智能合约返回的信息。所以,在这段代码中,.call用于异步调用getBalance函数,通过智能合约实例metaCoinInstance来获取accounts[0]地址的余额信息。

  it('should put 10000 MetaCoin in the first account', async () => {
    const metaCoinInstance = await MetaCoin.deployed();
    const balance = await metaCoinInstance.getBalance.call(accounts[0]);
    assert.equal(balance.valueOf(), 10000, "10000 wasn't in the first account");
  });
function getBalance(address addr) public view returns(uint) {
    return balances[addr];
}

link

const ConvertLib = artifacts.require("ConvertLib");
const MetaCoin = artifacts.require("MetaCoin");

module.exports = function(deployer) {
  deployer.deploy(ConvertLib);
  deployer.link(ConvertLib, MetaCoin);
  deployer.deploy(MetaCoin);
};

在这段代码中,deployer.link(ConvertLib, MetaCoin)的作用是将名为ConvertLib的库与名为MetaCoin的智能合约进行关联。在Solidity中,库是一种可重用的代码片段,可以通过使用import语句在其他合约中重复使用。通常情况下,库被设计用于包含一些常见的功能或实用函数,以便在多个智能合约中共享和重用。deployer.link()是合约迁移工具(truffle中的deployer对象)的一个方法。它的作用是将一个库与一个智能合约进行关联,以确保智能合约可以访问并使用该库中的函数和功能。在这里,deployer.link(ConvertLib, MetaCoin)的目的是将名为ConvertLib的库与名为MetaCoin的智能合约进行关联,这样当部署MetaCoin合约时,它就能够访问和使用ConvertLib库中的功能或实用函数。

valueOf

.valueOf()是JavaScript中一个内置的方法,用于将一个对象转换为其原始值。当在某个上下文中需要一个对象的原始值时,JavaScript会自动调用.valueOf()方法。该方法可以被重写,以返回指定对象的原始值。对于智能合约对象,.valueOf()方法可以用于获取其内部值。当你使用web3.js库的时候,调用智能合约实例的.valueOf()方法将返回一个Promise对象,该Promise对象可以异步将智能合约的值作为原始值返回。例如,当你使用await关键字调用.valueOf()时,你可以在JavaScript中获取智能合约的原始数值,而不是只返回智能合约实例的对象。总结起来,.valueOf()方法用于获取智能合约的原始值。在代码中,.valueOf()方法可以用于获取智能合约的返回值或状态变量的值,并以原始形式返回。

最后更新 2023-08-18
评论 ( 0 )
OωO
隐私评论