以太坊 – 使用truffle console访问智能合约

简介: truffle console 是区块链开发人员的强大工具,这是一个命令行工具,可以在命令行中执行javascript代码,与智能合约进行交互。这对于开发智能合约非常有用。

1. 使用 truffle console 访问智能合约

truffle console 是区块链开发人员的强大工具,这是一个命令行工具,可以在命令行中执行javascript代码,与智能合约进行交互。这对于开发智能合约非常有用。

我们已经成功地将智能合约部署到本地区块链网络,接下来我们将使用 truffle console 与智能合约进行交互。

启动 truffle console:

$ truffle console

image.gif

进入控制台后,让我们获取已部署智能合约的一个实例,看看能否从该合约中读取value值。从控制台运行以下代码:

MyContract.deployed().then((instance) => { app = instance } )

image.gif

这里MyContract是之前在迁移文件中创建的变量名称,使用deployed()函数获取一个已部署合约的实例,并将其分配给promise回调函数中的一个app变量。

现在可以获取智能合约中的value值:

app.get()
// => 'myValue'

image.gif

value设置一个新值:

app.set('New Value')

image.gif

重新获取智能合约中的value值:

app.get()
// => 'New Value'

image.gif

可以通过以下命令退出truffle console:

.exit

image.gif

2. 智能合约测试(truffle test)

类似Java中JUnit单元测试工具,Trfuffle test可以帮助我们对智能合约项目进行白盒测试。

对于区块链项目,测试显得尤其重要,因为部署合约、迁移合约的成本都是相当高的,都要消耗Gas。

2.1 编写测试代码

现在让我们对前面章节中创建的智能合约,编写一些测试代码。整个测试过程模拟对智能合约MyContract获取value值、设置value值的过程。

先确保MyContract已经正确部署到Ganache本地区块链网络中。测试中将会用到Mocha测试框架,与Chai断言库,但Truffle已经集成了这些库。

测试代码用JavaScript编写,模拟与智能合约的交互,就像使用truffle console所做的那样。

在项目根目录下的test目录中,添加测试脚本文件: MyContract.js

MyContract.js中的测试代码:

// 首先,`require`合约并将其分配给一个变量`MyContract`
const MyContract = artifacts.require('./MyContract.sol');
// 调用“contract”函数,并在回调函数中编写所有测试
// 回调函数提供一个“accounts”变量,表示本地区块链上的所有帐户。
contract('MyContract', (accounts) => {
    // 第1个测试:调用get()函数,检查返回值,测试合约中value初始值是否是: 'myValue'
    it('initializes with the correct value', async () => {
        // 获取合约实例
        const myContract = await MyContract.deployed()
        const value = await myContract.get()
        // 使用断言测试value的值
        assert.equal(value, 'myValue')
    })
    // 第2个测试: 调用set()函数来设置value值,然后调用get()函数来确保更新了值
    it('can update the value', async () => {
        const myContract = await MyContract.deployed()
        myContract.set('New Value');
        const value = await myContract.get()
        assert.equal(value, 'New Value')
    })
})

image.gif

代码说明,请见注释。

2.2 运行测试脚本

执行命令行运行测试:

$ truffle test

image.gif

测试详情:

G:\qikegu\ethereum\mydapp>truffle test
Using network 'development'.
Compiling your contracts...
===========================
> Everything is up to date, there is nothing to compile.
  Contract: MyContract
    √ initializes with the correct value (76ms)
    √ can update the value (78ms)
  2 passing (188ms)

image.gif

目录
相关文章
|
2天前
|
IDE 区块链 开发工具
智能合约开发环境搭建及Hello World合约
智能合约开发环境搭建及Hello World合约
40 1
|
开发框架 JavaScript 前端开发
如何使用Truffle来对智能合约实现并部署?
如何使用Truffle来对智能合约实现并部署?
214 0
|
JavaScript 前端开发 Go
【智能合约】Go语言调用以太坊 | geth
目录 1. geth 简介 1.1 下载地址: 1.2 安装: 1.3 查看是否安装成功 2. geth命令介绍 3. geth常用命令 3.1 指定数据目录 --datadir 3.2 账户相关 3.3 控制台console: 3.4 删除数据: 3.5 help 3.6 常见错误 4. Go语言调用合约 4.1 启动rpc端口 4.2 Go调用以太坊 4.3 调用接口 net_version net_listening net_peerCount eth接口 personal接口 db接口 最后
1041 0
【智能合约】Go语言调用以太坊 | geth
|
区块链 编译器
以太坊Truffle框架如何修改solidity版本?
当使用truffle开发以太坊solidity合约时,经常碰到的一个问题,就是你的solidity合约代码所要求的编译器版本,与truffle预装的solitiy编译器版本不匹配。本文将介绍如何更改truffle中的solidity版本。
1825 0
|
存储 区块链 Python
以太坊中如何获取另外一个智能合约部署的合约地址?
如何获取另外一个智能合约部署的合约地址? 我正试图从另一个工厂合约中签智能合约,然后重新部署新智能合约的地址。然而,它返回的地址是交易哈希值而不是合约地址。
2277 0
|
JSON Ubuntu 区块链
区块链开发(一)搭建基于以太坊go-ethereum的私有链环境
区块链开发(一)搭建基于以太坊go-ethereum的私有链环境
464 0
区块链开发(一)搭建基于以太坊go-ethereum的私有链环境
|
JSON Go 区块链
【智能合约】Go语言调用智能合约 | geth
目录 1. 获取abi文件 2. 安装abigen工具 3. remix连接私有链 4. 合约部署 5. 初始化私有链节点创世块 6. 合约部署 7. 调用
1288 0
【智能合约】Go语言调用智能合约 | geth
|
开发框架 Dart 前端开发
|
JavaScript 测试技术 区块链
使用truffle部署以太坊智能合约到区块链
truffle是以太坊(ethereum)开发智能合约(smart contract)过程中最受欢迎的框架,本教程来安装构建一个基本的Truffle项目并部署一个智能合约到区块链。
2162 0