与合约互动
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进行创建合约
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()
方法可以用于获取智能合约的返回值或状态变量的值,并以原始形式返回。
版权属于:戏人看戏博客网
本文链接:https://day.nb.sb/archives/1298.html
若无注明均为戏人看戏原创,转载请注明出处,感谢您的支持!