以太坊 – 使用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

目录
相关文章
|
7月前
|
IDE 区块链 开发工具
智能合约开发环境搭建及Hello World合约
智能合约开发环境搭建及Hello World合约
110 1
|
JSON JavaScript 前端开发
以太坊 – 部署智能合约到Ganache
将编译好的智能合约部署到本地的Ganache区块链网络。步骤如下:更新项目的配置文件,修改网络配置连接到本地区块链网络(Ganache)。创建迁移脚本,告诉Truffle如何部署智能合约。运行新创建的迁移脚本,部署智能合约。...
1855 0
以太坊 – 部署智能合约到Ganache
|
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接口 最后
1141 0
【智能合约】Go语言调用以太坊 | geth
|
存储 安全 架构师
区块链101:Ethereum如何扩展
区块链101:Ethereum如何扩展
|
开发框架 JavaScript 前端开发
如何使用Truffle来对智能合约实现并部署?
如何使用Truffle来对智能合约实现并部署?
298 0
|
存储 区块链 Python
以太坊中如何获取另外一个智能合约部署的合约地址?
如何获取另外一个智能合约部署的合约地址? 我正试图从另一个工厂合约中签智能合约,然后重新部署新智能合约的地址。然而,它返回的地址是交易哈希值而不是合约地址。
2351 0
|
存储 Web App开发 移动开发
以太坊 – 智能合约前端页面
开发智能合约的前端页面,让用户可以通过前端页面与智能合约交互。这个页面的主要功能是:显示当前连接的帐户; 读取智能合约中存储的value值; 更新智能合约中存储的value值。
535 0
以太坊 – 智能合约前端页面
|
JSON Ubuntu 区块链
区块链开发(一)搭建基于以太坊go-ethereum的私有链环境
区块链开发(一)搭建基于以太坊go-ethereum的私有链环境
513 0
区块链开发(一)搭建基于以太坊go-ethereum的私有链环境
|
JSON Go 区块链
【智能合约】Go语言调用智能合约 | geth
目录 1. 获取abi文件 2. 安装abigen工具 3. remix连接私有链 4. 合约部署 5. 初始化私有链节点创世块 6. 合约部署 7. 调用
1393 0
【智能合约】Go语言调用智能合约 | geth
|
存储 区块链 编译器
以太坊智能合约简介(Solidity)
本文略过了冗杂介绍,直接下沉到代码示例。本文中包含一个存储实例和生成极简单 subcurrency 的实例