tokenpocketapp正版|truffle

作者: tokenpocketapp正版
2024-03-07 21:33:54

快速入门 Truffle | Truffle 中文文档 - DApp 开发框架 | 深入浅出区块链

快速入门 Truffle | Truffle 中文文档 - DApp 开发框架 | 深入浅出区块链

深入浅出区块链

Truffle 中文文档

v5.0.0

快速入门 Truffle

创建项目工程

项目结构

使用测试

编译合约

使用 Truffle Develop 部署合约

可选: 通过 Ganache 部署

合约交互

进一步学习

基本功能

安装 Truffle

环境依赖

Windows 用户需了解

创建 Truffle 项目工程

编译合约

合约文件目录

编译命令

构建工件 Artifacts

引入合约依赖文件

通过文件名导入依赖文件

从外部包导入合约

合约部署(Migrations)

部署命令

脚本文件

artifacts.require()

module.exports

初始化迁移功能

部署程序 Deployer

考虑网络

可用账号

部署程序接口 Deployer API

deployer.deploy(contract, args…, options)

deployer.link(library, destinations)

deployer.then(function() {…})

与合约进行交互

介绍

数据的读和写

交易 Transactions

调用 Calls

什么是合约抽象

执行合约函数

执行交易Transactions

执行调用 call

处理交易结果

捕获事件 events

部署新合约

指定合约地址

给合约发送以太

延伸阅读

Truffle 和 MetaMask 配合

MetaMask 是什么?

安装 MetaMask

MetaMask 和 Ganache 搭配使用

探测 MetaMask 注入的 web3

MetaMask 设置

搭配 Truffle Develop 使用 MetaMask

搭配 Ganache CLI 使用 MetaMask

用 EthPM 进行包管理

安装软件包

安装依赖

使用安装的合约

发布自己的软件包

Ropsten, Ropsten, Ropsten

包配置

命令

在发布之前

用 NPM 进行包管理

包文件布局

使用包

安装

在合约代码中使用包

在JavaScript中使用包

包的部署地址

发布之前

调试合约

概述

调试命令

调试器界面

(o) 跳过(step over)

(i) 进入(step into)

(u) 跳出(step out)

(n) 下一步(step next)

(;) 单步指令(step instruction)

(p) 打印指令(print instruction)

(h) print this help

(q) 退出

(r) 重置(reset)

(b) 设置断点(set a breakpoint)

(B) 移除断点(大写的B)

(c) 跳到下一个断点

(+) 添加一个监视表达式

(-) 移除监视表达式

(?) 列出所有的监视表达式及断点

(v) 显示变量

(T) 卸载交易

(t) 加载交易

添加和移除断点

使用控制台

为什么有两个控制台?

命令

登录控制台

登录Develop控制台

配置 Truffle Develop

功能

可用命令

编写外部脚本

命令

文件结构

第三方插件命令

Plugin installation / usage

Creating a custom command plugin

支持 Quorum 开发

已知问题

配置

Using Privacy Features

编写测试用例

测试合约

测试框架

测试用例目录

测试合约命令

”干净的“ 测试环境

速度和可靠性考虑

用 JavaScript 写测试用例

Use contract() instead of describe()

Use contract abstractions within your tests

Using artifacts.require()

Using web3

Examples

Using .then

Using async/await

Specifying tests

Advanced

TypeScript File Support

用 Solidity 写测试用例

Example

Test structure

Assertions

Deployed addresses

Test contract names

Test function names

before / after hooks

Advanced features

Testing for exceptions

Testing ether transactions

高级用法

选择网络及部署

配置

指定网络

Build artifacts

应用部署

构建过程

运行外部命令

Providing a custom function

Creating a custom module

Bootstrapping your application

创建 Truffle Box

创建 box

配置文件

ignore (array)

commands (object)

hooks (object)

图片

Truffle site listing

参考引用

选择以太坊客户端

开发过程中

Ganache

Truffle Develop

Ganache CLI

部署到线上网络

部署到私有网络

Truffle 配置

配置文件位置

解决 Windows 命令名冲突

常用配置选项

网络 networks

提供者 Providers

指定合约目录

指定合约构建生成目录

迁移文件目录

mocha

指定编译器

solc

使用外部编译器

插件 plugins

EthPM 配置

包名:package_name

版本:version

描述:description

作者 authors

关键字 keywords

依赖 dependencies

许可协议 license

合约抽象封装

使用方法

API

Contract Abstraction API

MyContract.new([arg1, arg2, ...], [tx params])

MyContract.at(address)

MyContract.deployed()

MyContract.link(instance)

MyContract.link(name, address)

MyContract.link(object)

MyContract.networks()

MyContract.setProvider(provider)

MyContract.setNetwork(network_id)

MyContract.hasNetwork(network_id)

MyContract.defaults([new_defaults])

MyContract.clone(network_id)

MyContract.numberFormat = number_type

MyContract.timeout(block_timeout)

MyContract.autoGas =

MyContract.gasMultiplier(gas_multiplier)

Contract Instance API

Making a transaction via a contract function

Explicitly making a call instead of a transaction

Calling getters

Processing transaction results

Sending Ether / Triggering the fallback function

Estimating gas usage

Truffle 命令手册

使用方法

命令列表

构建 build

编译合约 compile

config

启动控制台 console

创建 create

调试 debug

部署 deploy

控制台 develop

exec

帮助 help

初始化工程 init

安装 install

migrate

网络 networks

操作码 opcode

发布 publish

运行 run

测试 test

解包 unbox

查看版本 version

监视变化 watch

联系开发者

Gitter

Issue Tracker

Twitter

相关文档

Solidity 中文文档

Web3.js 中文文档

Truffle 中文文档

Docs »

快速入门 Truffle

Edit on GitHub

快速入门 Truffle¶

本文主要入门介绍如何创建 Truffle 项目以及将智能合约部署到区块链。

注解

在开始之前,最好对以太坊有基础的了解,推荐阅读 以太坊是什么 - 以太坊开发入门指南

或阅读 以太坊概述(英文) 。

创建项目工程¶

Truffle 大多数命令都是在 Truffle 项目目录下运行的。 所以第一步是创建一个 Truffle 项目。 可以创建一个空项目模板,不过对于刚接触Truffle的同学,推荐使用Truffle Boxes,它提供了示例应用代码和项目模板。 我们将使用MetaCoin box作为案例,它创建一个可以在帐户之间转移的Token(代币)。

为 Truffle 项目创建新目录:

mkdir MetaCoin

cd MetaCoin

下载 (“unbox”) MetaCoin box:

truffle unbox metacoin

注解

也可以使用 truffle unbox 命令下载其他的 Box

注解

如果要创建没有合约的空工程,可以使用 truffle init.

在操作完成之后,就有这样的一个项目结构:

contracts/: Solidity合约目录

migrations/: 部署脚本文件目录

test/: 测试脚本目录,参考 如何测试应用?

truffle.js: Truffle 配置文件

项目结构¶

注解

这仅仅是一个入门。后面的文章我们可以学习到更多。

contracts/MetaCoin.sol: 这是一个用 Solidity 编写的 MetaCoin 代币 智能合约。注意他还引用了目录下的另外一个合约文件 contracts/ConvertLib.sol 。

contracts/Migrations.sol: 这是一个单独的 Solidity 文件,用来管理和升级智能合约. 每一个工程都有这样的一个文件,并且通常不需要编辑它。

migrations/1_initial_migration.js: 这是一个部署脚本,用来部署 Migrations 合约,对应 Migrations.sol 文件。

migrations/2_deploy_contracts.js: 这是一个部署脚本,用来部署 MetaCoin 合约. (部署脚本的运行是有顺序的,以2开头的脚本通常在以1开头的脚本之后运行)

test/TestMetacoin.sol: 这是一个用Solidity编写的测试用例文件,用来检查合约是否像预期一样工作。

test/metacoin.js : 这是一个用JavaScript编写的测试用例脚本,用途和上面一样。

truffle-config.js (之前是 truffle.js): Truffle 配置文件, 用来设置网络信息,和其他项目相关的设置。当我们使用内建的默认的Truffle命令时,这个文件留空也是可以的。

使用测试¶

打开控制台终端,运行 Solidity 测试用例:

truffle test ./test/TestMetacoin.sol

我们可以看到下面的输出:

TestMetacoin

√ testInitialBalanceUsingDeployedContract (71ms)

√ testInitialBalanceWithNewMetaCoin (59ms)

2 passing (794ms)

注解

如果在windows平台运行,这个命令遇到问题,可以参考这个文档 解决Windows命名冲突 。

运行测试用例的时候。期望的行为,会输出在控制台

运行 JavaScript 测试用例

truffle test ./test/metacoin.js

You will see the following output

Contract: MetaCoin

√ should put 10000 MetaCoin in the first account

√ should call a function that depends on a linked library (40ms)

√ should send coin correctly (129ms)

3 passing (255ms)

编译合约¶

编译智能合约:

truffle compile

我们可以看到下面的输出:

Compiling .\contracts\ConvertLib.sol...

Compiling .\contracts\MetaCoin.sol...

Compiling .\contracts\Migrations.sol...

Writing artifacts to .\build\contracts

使用 Truffle Develop 部署合约¶

注解

如果使用 Ganache , 可以直接跳到下一部分。

为了部署我们的合约,我们需要连接到区块链网络。Truffle 提供了一个内置的个人模拟区块链,它可以帮助我们用来测试。注意,这个区块链是内地在我们本地的系统里面,他不和以太坊的组网进行连接。

我们可以使用Truffle Develop来创建区块链,并与之交互。

运行 Truffle Develop:

truffle develop

我们可以看到下面的信息:

Truffle Develop started at http://127.0.0.1:9545/

Accounts:

(0) 0x627306090abab3a6e1400e9345bc60c78a8bef57

(1) 0xf17f52151ebef6c7334fad080c5704d77216b732

(2) 0xc5fdf4076b8f3a5357c5e395ab970b5b54098fef

(3) 0x821aea9a577a9b44299b9c15c88cf3087f3b5544

(4) 0x0d1d4e623d10f9fba5db95830f7d3839406c6af2

(5) 0x2932b7a2355d6fecc4b5c0b6bd44cc31df247a2e

(6) 0x2191ef87e392377ec08e7c08eb105ef5448eced5

(7) 0x0f4f2ac550a1b4e2280d04c21cea7ebd822934b5

(8) 0x6330a553fc93768f612722bb8c2ec78ac90b3bbc

(9) 0x5aeda56215b167893e80b4fe645ba6d5bab767de

Private Keys:

(0) c87509a1c067bbde78beb793e6fa76530b6382a4c0241e5e4a9ec0a0f44dc0d3

(1) ae6ae8e5ccbfb04590405997ee2d52d2b330726137b875053c36d94e974d162f

(2) 0dbbe8e4ae425a6d2687f1a7e3ba17bc98c673636790f1b8ad91193c05875ef1

(3) c88b703fb08cbea894b6aeff5a544fb92e78a18e19814cd85da83b71f772aa6c

(4) 388c684f0ba1ef5017716adb5d21a053ea8e90277d0868337519f97bede61418

(5) 659cbb0e2411a44db63778987b1e22153c086a95eb6b18bdf89de078917abc63

(6) 82d052c865f5763aad42add438569276c00d3d88a2d062d36b2bae914d58b8c8

(7) aa3680d5d48a8283413f7a108367c7299ca73f553735860a87b08f39395618b7

(8) 0f62d96d6675f32685bbdb8ac13cda7c23436f63efbb9d07700d8669ff12b7c4

(9) 8d5366123cb560bb606379f90a0bfd4769eecc0557f1b362dcae9012b548b1e5

Mnemonic: candy maple cake sugar pudding cream honey tiny smooth crumble sweet treat

⚠️ Important ⚠️ : This mnemonic was created for you by Truffle. It is not secure.

Ensure you do not use it on production blockchains, or else you risk losing funds.

truffle(development)>

这也显示了10个账号,和他们对你的私钥,这些账号可以用来和区块链进行交互。

在 truffle(develop)> 提示符(因为提供了一个交互式控制台)下, Truffle 的命令可以不带前缀 truffle 执行。比如,可以直接输入compile 来执行truffle compile,以及直接输入 migrate 来部署编译的智能合约到区块链(相当于truffle migrate):

migrate

我们可以看到下面的信息:

Starting migrations...

======================

> Network name: 'develop'

> Network id: 4447

> Block gas limit: 6721975

1_initial_migration.js

======================

Deploying 'Migrations'

----------------------

> transaction hash: 0x3fd222279dad48583a3320decd0a2d12e82e728ba9a0f19bdaaff98c72a030a2

> Blocks: 0 Seconds: 0

> contract address: 0xa0AdaB6E829C818d50c75F17CFCc2e15bfd55a63

> account: 0x627306090abab3a6e1400e9345bc60c78a8bef57

> balance: 99.99445076

> gas used: 277462

> gas price: 20 gwei

> value sent: 0 ETH

> total cost: 0.00554924 ETH

> Saving migration to chain.

> Saving artifacts

-------------------------------------

> Total cost: 0.00554924 ETH

2_deploy_contracts.js

=====================

Deploying 'ConvertLib'

----------------------

> transaction hash: 0x97e8168f1c05fc40dd8ffc529b9a2bf45cc7c55b07b6b9a5a22173235ee247b6

> Blocks: 0 Seconds: 0

> contract address: 0xfb39FeaeF3ac3fd46e2123768e559BCe6bD638d6

> account: 0x627306090abab3a6e1400e9345bc60c78a8bef57

> balance: 99.9914458

> gas used: 108240

> gas price: 20 gwei

> value sent: 0 ETH

> total cost: 0.0021648 ETH

Linking

-------

* Contract: MetaCoin <--> Library: ConvertLib (at address: 0xfb39FeaeF3ac3fd46e2123768e559BCe6bD638d6)

Deploying 'MetaCoin'

--------------------

> transaction hash: 0xee4994097c10e7314cc83adf899d67f51f22e08b920e95b6d3f75c5eb498bde4

> Blocks: 0 Seconds: 0

> contract address: 0x6891Ac4E2EF3dA9bc88C96fEDbC9eA4d6D88F768

> account: 0x627306090abab3a6e1400e9345bc60c78a8bef57

> balance: 99.98449716

> gas used: 347432

> gas price: 20 gwei

> value sent: 0 ETH

> total cost: 0.00694864 ETH

> Saving migration to chain.

> Saving artifacts

-------------------------------------

> Total cost: 0.00911344 ETH

Summary

=======

> Total deployments: 3

> Final cost: 0.01466268 ETH

这里显示了交易的ID号,部署的合约地址。以及交易的花费和一些相关的状态。

注解

当然我们自己部署的时候,交给哈希和一个地址和我们的账号,都是和上面不一样的。

可选: 通过 Ganache 部署¶

注解

直接了解如何与合约进行交互,可以直接跳到下一个部分。

除了用上面的 Truffle Develop,还可以选择使用 Ganache, 这是一个桌面应用,他同样会创建一个个人模拟的区块链。 对于刚接触以太坊的同学来说,Ganache 会更容易理解,因为他把所有的信息,都输在前端的界面。

不像 Truffle Develop 把链和控制台集成在一起,使用 Ganache 需要编辑配置文件,以便 Truffle 能链接 Ganache 实例。

下载安装 Ganache.

编辑器打开 truffle.js ,使用下面的内容:

module.exports = {

networks: {

development: {

host: "127.0.0.1",

port: 7545,

network_id: "*"

}

}

};

这是使用默认的连接参数去连接 Ganache(如果IP和端口有变化,需要同步修改上面的内容)。

保存关闭配置文件。

启动Ganache

Ganache 界面

打开控制台,执行部署:

truffle migrate

我们可以看到类似下面的输出:

Starting migrations...

======================

> Network name: 'develop'

> Network id: 4447

> Block gas limit: 6721975

1_initial_migration.js

======================

Deploying 'Migrations'

----------------------

> transaction hash: 0x3fd222279dad48583a3320decd0a2d12e82e728ba9a0f19bdaaff98c72a030a2

> Blocks: 0 Seconds: 0

> contract address: 0xa0AdaB6E829C818d50c75F17CFCc2e15bfd55a63

> account: 0x627306090abab3a6e1400e9345bc60c78a8bef57

> balance: 99.99445076

> gas used: 277462

> gas price: 20 gwei

> value sent: 0 ETH

> total cost: 0.00554924 ETH

> Saving migration to chain.

> Saving artifacts

-------------------------------------

> Total cost: 0.00554924 ETH

2_deploy_contracts.js

=====================

Deploying 'ConvertLib'

----------------------

> transaction hash: 0x97e8168f1c05fc40dd8ffc529b9a2bf45cc7c55b07b6b9a5a22173235ee247b6

> Blocks: 0 Seconds: 0

> contract address: 0xfb39FeaeF3ac3fd4TinY66668exionge6bD638d6

> account: 0x627306090abab3a6e1400e9345bc60c78a8bef57

> balance: 99.9914458

> gas used: 108240

> gas price: 20 gwei

> value sent: 0 ETH

> total cost: 0.0021648 ETH

Linking

-------

* Contract: MetaCoin <--> Library: ConvertLib (at address: 0xfb39FeaeF3ac3fd46e2123768e559BCe6bD638d6)

Deploying 'MetaCoin'

--------------------

> transaction hash: 0xee6574803810e7314cc83adf899d67f51f22e08b920e657480385c5eb498bde4

> Blocks: 0 Seconds: 0

> contract address: 0x6891ATinyEF3dA9bc88C96fXlbC9eA4d6D88F768

> account: 0x627306090abab3a6e1400e9345bc60c78a8bef57

> balance: 99.98449716

> gas used: 347432

> gas price: 20 gwei

> value sent: 0 ETH

> total cost: 0.00694864 ETH

> Saving migration to chain.

> Saving artifacts

-------------------------------------

> Total cost: 0.00911344 ETH

Summary

=======

> Total deployments: 3

> Final cost: 0.01466268 ETH

这里同样显示了交易的ID号(hash),部署的合约地址。以及交易的花费和一些相关实时状态。

注解

当然我们自己部署的时候,交给哈希和一个地址和我们的账号,都是和上面不一样的。

在 Ganache 里,点击 “Transactions” 可以看到交易详情。

为了和合约进行交互,我们可以使用 Truffle 的控制台:truffle console, Truffle console 和 Truffle Develop 类似,仅仅是他们连接的链不一样而已,这里是连接 Ganache 。

truffle console

可以看到下面的提示:

truffle(development)>

注解

控制台提示符:truffle(development)> 括号里,指当前连接的网络。

合约交互¶

可以使用控制台 console 和合约进行交互:

注解

我们在例子中使用 web3.eth.getAccounts() , 它返回一个 promise 从中可以获取到由助记词生成的所有账号。 如果指定 (await web3.eth.getAccounts())[0] 会返回 0x627306090abab3a6e1400e9345bc60c78a8bef57.

在 Truffle v5, 控制台支持 async/await 方法(同步方式), 这样让跟合约交互更简单了,方法如下:

从获取部署合约实例 及获取账号列表 开始:

truffle(development)> let instance = await MetaCoin.deployed()

truffle(development)> let accounts = await web3.eth.getAccounts()

检查账号余额:

truffle(development)> let balance = await instance.getBalance(accounts[0])

truffle(development)> balance.toNumber()

查看以太价值(其实就是调用了一个合约方法:合约方法里定义了一个metacoin 价值 2 ether):

truffle(development)> let ether = await instance.getBalanceInEth(accounts[0])

truffle(development)> ether.toNumber()

发送一些 metacoin 到其他的账号 :

truffle(development)> instance.sendCoin(accounts[1], 500)

检查刚刚收款人的余额:

truffle(development)> let received = await instance.getBalance(accounts[1])

truffle(development)> received.toNumber()

检查刚刚发送方的余额:

truffle(development)> let newBalance = await instance.getBalance(accounts[0])

truffle(development)> newBalance.toNumber()

进一步学习¶

本篇快速入门仅仅是了解 Truffle 工程的一个生命周期,还有很多内容需要学习,请学习文档其余部分。

Next

Previous

© Copyright 2019, 深入浅出区块链

最后更新于 2019/05/21.

Built with Sphinx using a theme provided by Read the Docs.

以太坊开发框架——Truffle的基础使用_truffle框架-CSDN博客

>

以太坊开发框架——Truffle的基础使用_truffle框架-CSDN博客

以太坊开发框架——Truffle的基础使用

最新推荐文章于 2024-03-06 14:09:26 发布

死磕的斯坦张

最新推荐文章于 2024-03-06 14:09:26 发布

阅读量1.9w

收藏

41

点赞数

8

分类专栏:

区块链

文章标签:

区块链

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

本文链接:https://blog.csdn.net/david2000999/article/details/120472092

版权

区块链

专栏收录该内容

10 篇文章

7 订阅

订阅专栏

这里写目录标题

TruffleTruffle 简介Truffle 的客户端安装Truffle创建项目Migrationartifacts.require()exports 的函数deployer 对象更新 migration 文件

更新 truffle 配置文件创建账户(可用 metamask 上账户转币)部署新建 JavaScript 文件 app/scripts/index.js

Truffle

Truffle 简介

truffle unbox webpack 一条命令由于要下载众多需要的模块,大概耗时 10 分钟左右,所以我们先来了解一下 Truffle。

Truffle 是目前最流行的以太坊 DApp 开发框架,(按照官网说法)是一个世 界级的开发环境和测试框架,也是所有使用了 EVM 的区块链的资产管理通道,它基于 JavaScript,致力于让以太坊上的开发变得简单。

Truffle 有以下功能:

 内置的智能合约编译,链接,部署和二进制文件的管理。

 合约自动测试,方便快速开发。

 脚本化的、可扩展的部署与发布框架。

 可部署到任意数量公网或私网的网络环境管理功能

 使用 EthPM 和 NPM 提供的包管理,使用 ERC190 标准。

 与合约直接通信的直接交互控制台(写完合约就可以命令行里验证了)。

 可配的构建流程,支持紧密集成。

 在 Truffle 环境里支持执行外部的脚本。

Truffle 的客户端

我们之后写的智能合约必须要部署到链上进行测试,所以 truffle 构建的 DApp 也必须选择一条链来进行部署。我们可以选择部署到一些公共的测试链比如 Rinkeby 或者 Ropsten 上,缺点是部署和测试时间比较长,而且需要花费一定的时间赚取假代币防止 out of gas。当然,对于 DApp 发布的正规流程,staging(模拟环境)还是应该用测试公链的。

还有一种方式就是部署到私链上,这在开发阶段是通常的选择。Truffle 官方 推荐使用以下两种客户端:  Ganache  truffle develop

而 truffle develop 是 truffle 内置的客户端,跟命令行版本的 Ganache 基本 类似。在 truffle 目录下 bash 输入:

>truffle develop

即可开启客户端,和 ganache 一样,它也会给我们自动生成 10 个账户。 唯一要注意的是在 truffle develop 里执行 truffle 命令的时候需要省略前面的 “truffle”,比如“truffle compile”只需要敲“compile”就可以了

安装Truffle

启动 geth,然后我们来安装 truffle。truffle 是一个 dapp 的开发框架,它 可以使得 dapp 的构建和管理非常容易。

你可以像这样使用 npm 安装 truffle: >npm install -g truffle 然后我们创建一个空目录,在下面创建 truffle 项目:

>mkdir simple_voting_by_truffle_dapp

>cd simple_voting_by_truffle_dapp

>npm install -g webpack

>truffle unbox webpack

truffle init: 在当前目录初始化一个新的 truffle 空项目(项目文件只有 truffle-config.js 和 truffle.js;contracts 目录中只有 Migrations.sol;migrations目录中只有 1_initial_migration.js)

truffle unbox: 直接下载一个 truffle box,即一个预先构建好的 truffle 项目; unbox 的过程相对会长一点,完成之后应该看到这样的提示:

这里的 webpack 就是一个基于 webpack 构建流程的官方项目框架(truffle box),更多 truffle box 参见 https://truffleframework.com/boxes

创建项目

初始化一个 truffle 项目时,它会创建运行一个完整 dapp 所有必要的文件 和目录。我们直接下载 webpack 这个 truffle box,它里面的目录也是类似的:

>ls

README.md contracts node_modules test

webpack.config.js truffle.js app migrations

package.json

>ls app/

index.html javascripts stylesheets

>ls contracts/

ConvertLib.sol MetaCoin.sol Migrations.sol

>ls migrations/

1_initial_migration.js 2_deploy_contracts.js

 app/ - 你的应用文件运行的默认目录。这里面包括推荐的 javascript 文 件和 css 样式文件目录,但你可以完全决定如何使用这些目录。  contract/ - Truffle 默认的合约文件存放目录。  migrations/ - 部署脚本文件的存放目录  test/ - 用来测试应用和合约的测试文件目录  truffle.js - Truffle 的配置文件 truffle 也会创建一个你可以快速上手的示例应用,你可以放心地删除项目下面 contracts 目录的 ConvertLib.sol和 MetaCoin.sol 文件。

>rm contracts/ConvertLib.sol contracts/MetaCoin.sol

此外,在你的项目目录下查找一个叫做 truffle.js 的配置文件。它里面包含 了一个用于开发网络的配置。将端口号从 7545 改为 8545,因为我们的私链及ganache 默认都会在该端口运行。

Migration

migration 的概念 理解 migrations(迁移)目录的内容非常重要。这些迁移文件用于将合约 部署到区块链上。

之前的项目中通过在 node 控制台中调VotingContract.new 将投票合约部署到区块链上。以后,我们再也不需要这么做了,truffle 将会部署和跟踪所有的部署。

Migrations(迁移)是 JavaScript 文件,这些文件负责暂存我们的部署任务,并且假定部署需求会随着时间推移而改变。随着项目的发展,我们应该创建新的迁移脚本,来改变链上的合约状态。所有运行过的 migration 历史记录,都会通过特殊的迁移合约记录在链上。

第一个迁移 1_initial_migration.js 向区块链部署了一个叫做 Migrations 的合约,并用于存储你已经部署的最新合约。每次你运行 migration 时,truffle 会向区块链查询获取最新已部署好的合约,然后部署尚未部署的任何合约。

然后它会更新 Migrations 合约中的 last_completed_migration 字段指向最新部署的合约。你可以简单地把它当成是一个数据库表,里面有一列 last_completed_migration ,该列总是保持最新状态。

migration 文件的命名有特殊要求:前缀是一个数字(必需),用来标记迁 移是否运行成功;后缀是一个描述词汇,只是单纯为了提高可读性,方便理解。

artifacts.require()

在脚本的开始,我们用 artifacts.require() 方法告诉 truffle 想要进行部署迁 移的合约,这跟 node 里的 require 很类似。不过需要注意,最新的官方文档告诫,应该传入定义的合约名称,而不要给文件名称——因为一个.sol 文件中可能包含了多个 contract。

exports 的函数

migration js 里的 exports 的函数,需要接收一个 deployer 对象作为第一个 参数。这个对象在部署发布的过程中,主要是用来提供清晰的语法支持,同时提供一些通用的合约部署职责,比如保存部署的文件以备稍后使用。

deployer 对象

deployer 对象是用来暂存(stage)部署任务的主要操作接口。 像所有其它在 Truffle 中的代码一样,Truffle 提供了我们自己代码的合约抽 象层(contract abstractions),并且进行了初始化,以方便你可以便利的与以太坊的网络交互。这些抽象接口都是部署流程的一部分。

更新 migration 文件

将 2_deploy_contracts.js 的内容更新为以下信息:

var Voting = artifacts.require("./Voting.sol");

module.exports = function(deployer) {

deployer.deploy(Voting, ['Alice', 'Bob', 'Cary'], {gas:

290000});

};

从上面可以看出,部署者希望第一个参数为合约名,跟在构造函数参数后面。

在我们的例子中,只有一个参数,就是一个候选者数组。第三个参数是一个哈希,我们用来指定部署代码所需的 gas。gas 数量会随着你的合约大小而变化。对于投票合约, 290000 就足够了。

更新 truffle 配置文件

像下面这样更新 truffle.js 的内容:

require('babel-register')

module.exports = {

networks: {

development: {

host: 'localhost',

port: 8545,

network_id: '*',

gas: 470000

} } }

你会注意到,之前的 truffle.js 与我们更新的文件唯一区别在于 gas 选项。 这是一个会应用到所有 migration 的全局变量。比如,如果你没有指定 2_deploy_contracts.js gas 值为 290000,migration 就会采用默认值 470000.

合约代码Voting.sol 之前我们已经完成了编码工作,无须额外改动即可用于 truffle。将文件从 simple_voting_dapp 复制到 contracts 目录即可。

创建账户(可用 metamask 上账户转币)

在能够部署合约之前,我们需要一个里面有一些以太的账户。当我们用 ganache 的时候,它创建了 10 个测试账户,每个账户里面有 100 个测试以 太。但是对于测试网和主网,我们必须自己创建账户,并往里面打一些以太。

在之前的 ganache 应用里,我们曾单独启动了一个 node 控制台,并初始 化了 web3 对象。当我们执行 truffle 控制台时,truffle 会帮我们做好所有准备,我们会有一个立即可用的 web3 对象。现在我们有一个账户,地址为 ‘0x95a94979d86d9c32d1d2ab5ace2dcc8d1b446fa1’ (你会得到一个不同的地址),账户余额为 0。

>truffle console

// Replace 'verystrongpassword' with a good strong password.

truffle(development)>

web3.personal.newAccount('verystrongpassword') ' 0xbaeec91f6390a4eedad8729aea4bf47bf8769b15'

truffle(development)>

web3.eth.getBalance('0xbaeec91f6390a4eedad8729aea4bf47bf8769b1

5')

{ [String: '0'] s: 1, e: 0, c: [ 0 ] }

truffle(development)>

web3.personal.unlockAccount('0xbaeec91f6390a4eedad8729aea4bf47

bf8769b15', 'verystrongpassword', 15000)

部署

如果已经有了一些以太,我们就可以继续编译并把合约部署到区块链上。你 可以在下面找到相关命令,如果一切顺利,就会出现以下输出。

>truffle compile

Compiling Migrations.sol...Compiling Voting.sol...Writing

artifacts to ./build/contracts

>truffle migrate

Running migration: 1_initial_migration.js

Deploying Migrations...

Migrations: 0x3cee101c94f8a06d549334372181bc5a7b3a8bee

Saving successful migration to network...

Saving artifacts...

Running migration: 2_deploy_contracts.js

Deploying Voting...

Voting: 0xd24a32f0ee12f5e9d233a2ebab5a53d4d4986203

Saving successful migration to network...

Saving artifacts...

如果你有多个账户,确保相关账户未被锁定。默认情况,第一个账户 web3.eth.accounts[0] 会用于部署。

可能出现的问题和解决方案

如果由于 gas 不足而部署失败,尝试将 migrations/2_deploy_contracts.js 里面的 gas account 增加至 500000。比如:deployer.deploy(Voting, [‘Rama’, ‘Nick’, ‘Jose’], {gas: 500000});如果你有多个账户,并且更喜欢自选一个账户,而不是 accounts[0],你可以在 truffle.js 中指定想要使用的账户地址。在 network_id 后面添 加 ‘from: your address’,truffle 将会使用你指定的地址来部署和交互。

如果部署顺利,你可以通过控制台和网页与合约进行交互

新建 JavaScript 文件 app/scripts/index.js

// Import the page's CSS. Webpack will know what to do with it.

import "../styles/app.css";

// Import libraries we need.

import { default as Web3} from 'web3';

import { default as contract } from 'truffle-contract'

import voting_artifacts from '../../build/contracts/Voting.json'

var Voting = contract(voting_artifacts);

let candidates = {"Alice": "candidate-1", "Bob": "candidate-2",

"Cary": "candidate-3"}

window.voteForCandidate = function(candidate) {

let candidateName = $("#candidate").val();

try {

$("#msg").html("Vote has been submitted. The vote count

will increment as soon as the vote is recorded on the blockchain.

Please wait.")

$("#candidate").val("");

Voting.deployed().then(function(contractInstance) {

contractInstance.voteForCandidate(candidateName,

{gas: 140000,

from:web3.eth.accounts[0]})

.then(function() {

let div_id = candidates[candidateName];

return

contractInstance.totalVotesFor

.call(candidateName).then(function(v) {

$("#" + div_id).html(v.toString());

$("#msg").html("");

});

});

});

} catch (err) {

console.log(err);

}

}

$( document ).ready(function() {

if (typeof web3 !== 'undefined') {

console.warn("Using web3 detected from external

source like Metamask") // Use Mist/MetaMask's provider

window.web3 = new Web3(web3.currentProvider);

} else {

console.warn("No web3 detected. Falling back to

http://localhost:8545. You should remove this fallback when you

deploy live, as it's inherently insecure. Consider switching to

Metamask for development. More info here:

http://truffleframework.com/tutorials/truffle-and-metamask");

// fallback - use your fallback strategy (local node / hosted node

+ in-dapp id mgmt / fail)

window.web3 = new Web3(new

Web3.providers

.HttpProvider("http://localhost:8545"));

}

Voting.setProvider(web3.currentProvider);

let candidateNames = Object.keys(candidates);

for (var i = 0; i < candidateNames.length; i++) {

let name = candidateNames[i];

Voting.deployed().then(function(contractInstance) {

contractInstance.totalVotesFor

.call(name).then(function(v) {

$("#" + candidates[name])

.html(v.toString());

});

});

}

});

Line 7: 当你编译部署好投票合约时,truffle 会将 abi 和部署好的地址存储 到一个 build 目录下面的 json 文件。我们已经在之前讨论了 abi 。我们会用 这个信息来启动一个 Voting 抽象。我们将会随后用这个 abstraction 创建一个Voting 合约的实例。

Line 14: Voting.deployed() 返回一个合约实例。truffle 的每一个调用会返 回一个 promise,这就是为什么我们在每一个交易调用时都使用 then().

控制台交互需要重新打开一个新的 console

>truffle console

truffle(default)>

Voting.deployed().then(function(contractInstance)

{contractInstance.voteForCandidate('Alice').then(function(v)

{console.log(v)})})

{ blockHash:

'0x7229f668db0ac335cdd0c4c86e0394a35dd471a1095b8fafb52ebd76714

33156',

blockNumber: 469628,

contractAddress: null,

....

....

truffle(default)>

Voting.deployed().then(function(contractInstance)

{contractInstance.totalVotesFor.call('Alice').then(function(v)

{console.log(v)})})

{ [String: '1'] s: 1, e: 0, c: [ 1] }

在调用 voteForCandidate 方法之后需要稍等一下,因为发送交易需要时间; 注意,truffle 的所有调用都会返回一个 promise,这就是为什么会看到每个 响应被包装在 then() 函数下面;另外 totalVoteFor() 方法也可以不加.call() 直 接调用,不会发送交易。

发出的交易可以在 geth 的 log 输出文件中查到;如果我们连接的是测试网 络,可以在 etherscan 上 https://rinkeby.etherscan.io 查询。

可以看到 truffle 默认的 gasPrice 是 100GWei,如果心疼,可以在 truffle.js 中更改,加上 gasPrice: 1000000000 将其改为 1GWei,重启 truffle console 生效。

网页交互 在控制台用 webpack 启动服务器:

>npm run dev

默认端口 8080,在浏览器访问 localhost:8080 即可看到页面。 如果安装了 metamask,index.js 中会自动检测并使用 metamask 作为 web3 Provider;所以应该注意把 metamask 切换到我们当前连接的网络。

优惠劵

死磕的斯坦张

关注

关注

8

点赞

41

收藏

觉得还不错?

一键收藏

知道了

0

评论

以太坊开发框架——Truffle的基础使用

这里写目录标题TruffleTruffle 简介Truffle 的客户端安装Truffle创建项目Migrationartifacts.require()exports 的函数deployer 对象更新 migration 文件更新 truffle 配置文件创建账户(可用 metamask 上账户转币)部署新建 JavaScript 文件 app/scripts/index.jsTruffleTruffle 简介truffle unbox webpack 一条命令由于要下载众多需要的模块,大概耗时 1

复制链接

扫一扫

专栏目录

以太坊区块链积分系统truffle项目源代码

09-06

以太坊区块链积分系统truffle项目源代码,本人注释过了,最重要的文件是Score.sol 和 app.js ,可以帮助学习以太坊dapp开发

【区块链-智能合约工程师】第四篇:Truffle框架安装和介绍(Windows)

soldi_er的博客

01-03

2784

Truffle 是目前最流行的以太坊 DApp 开发框架,(按照官网说法)是一个世界级的开发环境和测试框架,也是所有使用了 EVM 的区块链的资产管理通道,它基于 JavaScript,致力于让以太坊上的开发变得简单。内置的智能合约编译,链接,部署和二进制文件的管理。合约自动测试,方便快速开发。脚本化的、可扩展的部署与发布框架。可部署到任意数量公网或私网的网络环境管理功能使用 EthPM 和 NPM 提供的包管理,使用 ERC190 标准。

参与评论

您还未登录,请先

登录

后发表或查看评论

安装truffle的前提条件(nodejs和npm),truffle的webpack案例测试,webpack项目中的报错

qq_50330658的博客

09-07

8982

truffle安装

Ubuntu20.04下truffle相关组件版本如下:

Truffle v5.2.4 (core: 5.2.4)

Solidity v0.5.16 (solc-js)

Node v14.16.0

Web3.js v1.2.9

npm v7.6.3

1.curl 安装

sudo apt-get install curl

2.node和npm安装

(node 和npm的版本要相匹配不然后续truffle

Truffle搭建环境migrate步骤错误解决方案

dick的博客

12-25

4186

1.truffle migrate失败

报错信息为:

2_deploy_contracts.js

=====================

C:\Users\asus\AppData\Roaming\npm\node_modules\truffle\build\cli.bundled.js:260211

throw new Error("Could not find artifacts f...

truffle-demo:Truffle以太坊Dapp开发框架

05-10

Truffle以太坊Dapp开发框架

文章地址:

前言

区块链的开发对于大多数的人来说,都是一件很新、很难的事情,有太多不一样的技术要学习。区块链有自己的设计理念,不同于传统分布式系统架构,数据同步机制,共识算法等。以太坊作为区块链2.0的产品,最独特是智能合约的设计,是超脱于技术的思维体系。

通过 Truffle 把这些不同的理念和思路进行整合,转换为开发人员能明白的一种编程方法。

目录

Truffle安装

初始化项目

启动测试节点

部署合约

自定义的智能合约

交互的控制台

启动合约服务

下载和运行

git clone https://github.com/bsspirit/truffle-demo.git

cd truffle-demo

npm install -g truffle

npm install -g ethereumjs-testrpc

testrpc

truffle co

【web3实践 | 以太坊开发框架Truffle使用】

小新的博客

03-29

2419

Truffle是一个面向以太坊的开发框架,提供一整套构建、测试、部署以及管理智能合约的开发工具。Truffle可以与以太坊节点交互,使开发人员能够在本地开发、测试和部署智能合约。Truffle提供了一个基于命令行的、易于使用的开发环境,可以通过Truffle来编写智能合约,进行本地测试和调试,进行远程部署,以及与以太坊网络进行交互。Truffle还提供了自己的智能合约编译器和构建管道,可以方便地构建、优化和管理智能合约的构建过程,减少了手动干预的需要。

以太坊DAPP——truffle框架的使用

Limbo_Y的博客

12-14

691

这里写自定义目录标题以太坊DAPP——truffle框架的使用操作系统安装Node.js和npm安装Truffle安装Ganache-cli新建一个空文件夹功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公...

深入探索Truffle Suite:构建、测试和部署以太坊智能合约的完整开发框架

难办就别办的博客

05-02

632

Truffle Suite 是一个完整的以太坊开发框架,它提供了一整套工具和库,可帮助开发者更快地构建、测试和部署以太坊智能合约。无论您是初学者还是经验丰富的开发者,Truffle Suite 都是一个值得尝试的开发框架。本文将深入探讨 Truffle Suite 的各个组件,包括 Truffle、Ganache 和 Drizzle,以及如何使用它们来进行以太坊智能合约开发以及如何在以太坊智能合约开发中使用 Truffle Suite 的各个组件,包括 Truffle、Ganache 和 Drizzle。

Truffle Suite框架

m0_69117588的博客

05-09

154

Truffle Suite框架

Truffle最受欢迎的区块链开发框架

08-08

Truffle - 是以太坊的开发环境,测试框架和资产管道,旨在解放太坊开发人员。

以太坊truffle框架开发包

07-14

以太坊turffle框架初始化的demo实例,需要相关环境才能运行,可以参考我的博客,想学习dapp开发的同学可以看看

以太坊DApp开发的入门示例

01-27

ubuntu16.04,64位 还需要安装以太坊相关的环境: *nodejs *truffle *solidity*testrpc 另外,本篇还会用到webpack,安装教程网上也有很多。这部分如果不熟悉的话请自行查阅学习下。需

以太坊、私有链搭建、web3教程、Truffle开发入门.rar

10-26

快速学习从头开始学习以太坊,从私链搭建到以太坊基础知识以及solidity智能合约,再到web3.js开发,最后使用Truffle管理项目。

EthSign联合创始人 POTTER LI 确认出席Hack .Summit() 香港区块链开发者大会!

TechubNews的博客

03-04

1012

Hack .Summit() 是专注于区块链开发者的盛会,首届会议于 2014 年举办,截至 2023 年的上一届会议,Hack .Summit() 累计参与人数已超 13 万,总计邀请了超 1000 名具有全球影响力的 Web3 重磅嘉宾与会。thSign联合创始人 POTTER LI确认将出席由 Hack VC 主办,并由 AltLayer 和 Berachain 联合主办,与 SNZ 和数码港合作,由 Techub News 承办的Hack.Summit() 2024区块链开发者盛会。

【01】区块链科普100天-模块化区块链

总要有点可以骄傲的东西

02-29

641

这不仅减轻了主链的负担,也为开发者提供了更大的灵活性和创新空间。lgnis是基于Ardor公链的一个子链,母子链架构增强了网络性能,而且提供了更高的灵活性,这种架构不仅增强了网络的性能,而且提供了很高的灵活性,适合快速发展和部署DApp。1.层次架构:传统区块链将所有任务,如交易处理、共识机制、数据存储等集成在单一层中,模块化区块链将这些功能分割成独立的层,实现更高效的处理和升级。2.可拓展性:模块化区块链中,不同功能的隔离提高了整体网络的安全性,即使某一模块出现安全问题,也不会影响整个网络。

Ethersacn的交易数据是什么样的(2)

在这个数字革命的时代,我们将引领您穿越去中心化、智能合约、加密货币以及分布式应用程序的世界。无论您是初学者还是经验丰富的区块链开发者,我们都致力于为您提供有价值的信息和见解。

03-04

513

允许对复杂的数据结构进行编码。所以分析交易数据就是对。它被用于将各种数据结构转换为。,以便在以太坊中传输和存储。

如何做代币分析:以 USDC 币为例

最新发布

m0_60517769的博客

03-06

285

USDC 是最透明和值得信赖的稳定币之一,因为每个流通中的 USDC 代币都有相应数量的美元储备。

什么是区块链粉尘攻击?

J_Lee

03-02

970

什么是区块链粉尘攻击?

Kakarot:当今以太坊的未来

mutourend的博客

03-06

873

Kakarot:当今以太坊的未来

以太坊智能合约开发第六篇:truffle开发框架

05-24

Truffle是一个以太坊智能合约开发框架,它提供了一系列的工具和库,可以帮助开发者更加方便地编写、测试和部署智能合约。

Truffle的主要功能包括:

1. 合约编译器:Truffle提供了一个内置的Solidity编译器,可以将Solidity代码编译成以太坊虚拟机可以理解的字节码。

2. 合约部署:Truffle可以帮助开发者将编译后的合约部署到以太坊网络中,同时还提供了一些便捷的工具,比如自动部署。

3. 测试框架:Truffle提供了一个完整的测试框架,可以帮助开发者编写测试用例,保障合约的安全性和正确性。

4. 调试工具:Truffle提供了一个交互式调试工具,可以帮助开发者快速定位合约中的问题。

5. 包管理工具:Truffle提供了一个包管理工具,可以方便地管理合约中使用的依赖库。

总之,Truffle是一个非常强大的以太坊智能合约开发框架,可以帮助开发者更加高效地进行合约开发。

“相关推荐”对你有帮助么?

非常没帮助

没帮助

一般

有帮助

非常有帮助

提交

死磕的斯坦张

CSDN认证博客专家

CSDN认证企业博客

码龄5年

暂无认证

469

原创

16万+

周排名

79万+

总排名

81万+

访问

等级

7008

积分

565

粉丝

522

获赞

115

评论

3348

收藏

私信

关注

热门文章

百度网盘秒传链接怎么用及实现原理

55435

Web3.js的基本使用(与以太坊智能合约的交互)

33837

测试用例设计——等价类划分法

26076

idea运行项目报错Cannot run program “C:\Program Files\Java\jdk1.8.0_121\bin\java.exe......解决办法

24726

以太坊开发框架——Truffle的基础使用

19924

分类专栏

Java学习

131篇

区块链

10篇

大前端

65篇

Python

25篇

机器学习

5篇

数学建模

11篇

尚医通项目

16篇

计算机系统和网络

34篇

软件测试和软件工程

20篇

信息安全

3篇

大数据技术栈

2篇

算法和数据结构

11篇

C和C++

111篇

数据库

25篇

学习之路

6篇

Linux,Docker和Git

23篇

最新评论

npm install过程中一直卡在sill install loadAllDepsIntoIdealTree

十四点三十七:

npm 淘宝镜像已经从 registry.npm.taobao.org 切换到了 registry.npmmirror.com。旧域名也将于 2022 年 5 月 31 日停止服务,建议更改下,要不还是报错

Problem E: 指针:调用自定义函数input、output完成对n个元素的数组进行输入输出。

Dl367:

想问问input里面scanf为什么是a+i

Problem C: 零起点学算法83——数组中删数

2301_80436713:

为啥能运行但是不出数啊

测试用例设计——等价类划分法

45°台风:

老哥这篇文章由浅入深,从思维着手,很是不错,能告诉我原创是?

关于企业贷款违约情况的数据分析研究的Python数据分析案例

m0_64697021:

求数据

您愿意向朋友推荐“博客详情页”吗?

强烈不推荐

不推荐

一般般

推荐

强烈推荐

提交

最新文章

基于斗鱼的娱乐直播视频平台--Vue移动端页面

基于Pygame框架的交通导流可视化模拟

机器学习笔记05——集成学习

2022年24篇

2021年266篇

2020年117篇

2019年95篇

目录

目录

分类专栏

Java学习

131篇

区块链

10篇

大前端

65篇

Python

25篇

机器学习

5篇

数学建模

11篇

尚医通项目

16篇

计算机系统和网络

34篇

软件测试和软件工程

20篇

信息安全

3篇

大数据技术栈

2篇

算法和数据结构

11篇

C和C++

111篇

数据库

25篇

学习之路

6篇

Linux,Docker和Git

23篇

目录

评论

被折叠的  条评论

为什么被折叠?

到【灌水乐园】发言

查看更多评论

添加红包

祝福语

请填写红包祝福语或标题

红包数量

红包个数最小为10个

红包总金额

红包金额最低5元

余额支付

当前余额3.43元

前往充值 >

需支付:10.00元

取消

确定

下一步

知道了

成就一亿技术人!

领取后你会自动成为博主和红包主的粉丝

规则

hope_wisdom 发出的红包

实付元

使用余额支付

点击重新获取

扫码支付

钱包余额

0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。 2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

【区块链开发入门】(四) Truffle详解篇1_truffle区块-CSDN博客

>

【区块链开发入门】(四) Truffle详解篇1_truffle区块-CSDN博客

【区块链开发入门】(四) Truffle详解篇1

最新推荐文章于 2023-07-25 10:13:16 发布

Famidlistimo

最新推荐文章于 2023-07-25 10:13:16 发布

阅读量1.8k

收藏

13

点赞数

4

分类专栏:

区块链

文章标签:

区块链

以太坊

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

本文链接:https://blog.csdn.net/weixin_44029550/article/details/110530722

版权

区块链

专栏收录该内容

14 篇文章

10 订阅

订阅专栏

由于本篇篇幅较长,因此转为两篇文章。Truffle详解篇篇2请见:link 目录导航页 【区块链开发入门】(一) 以太坊的搭建与运行 【区块链开发入门】(二) 以太坊的编程接口 【区块链开发入门】(三) Solidity合约编译、部署 【区块链开发入门】(四) Truffle详解篇1 【区块链开发入门】(四) Truffle详解篇2

目录

一、什么是Truffle二、安装Truffle三、创建并初始化项目四、创建合约五、编译合约六、迁移合约1. arifacts.require()2. module.exports3. 初始化迁移合约4. 部署器(deployer)5. deployer API

一、什么是Truffle

Truffle是针对基于以太坊的Solidity语言的一套开发框架。本身基于Javascript。Truffle是一个世界级的开发环境,测试框架,以太坊的资源管理通道,旨在让以太坊上的开发变得简单,Truffle有以下:

内置的智能合约编译,链接,部署和二进制文件的管理。利用快速开发的自动合约测试。可脚本化的,可扩展的部署与发布框架。网络管理,用于部署到任意数量的公网或私网的网络环支持持续集成可配置构建管道。与合约直接通信的直接交互控制台(写完合约就可以命令行里验证了)。可配的构建流程,支持紧密集成。在Truffle环境里支持执行外部的脚本。提供了合约抽象接口,可以直接通过var instance = Storage.deployde();拿到合约对象,然后在Javascript中直接操作对于的合约函数。原理是使用了基于web3.js封装的Ether Pudding工具包。提供了控制台,使用框架构建后,可以直接在命令行调用输出结果,可极大地方便开发和调试。

当开发基于Truffle的应用时,推荐使用EthereumJS TestRPC。它是一个完整的运行在内存中的区块链,仅存在于开发设备上。它在执行交易时是实时返回的,而不用等待默认的出块时间,这样可以快速验证新写的代码。当出现错误时,也能即时得到反馈。它同时还是一个支持自动化测试的功能powerful的客户端。最好使用TestRPC客户端进行充分测试后,再使用Geth,Parity,ruby-ethereum等以太坊全客户端。这些是完整的客户端实现,包括挖矿、网络、区块以及交易的处理,基于Truffle的应用可以在不需要额外配置的情况下发布到这些客户端。

二、安装Truffle

通过如下命令安装Truffle:

$ sudo npm install -g truffle

或者

//把npm的包源设置为淘宝的镜像,先安装cnpm

$ sudo npm install -g cnpm --registry=https://registry.npm.taobao.org

$ sudo cnpm install -g truffle

我用的是第二个命令安装(第一个命令我的安装不了Truffle也不知什么情况)。但是还是遇到问题如下: 解决办法:就是更新node。

$ sudo npm install n -g //安装n这个工具,n这个工具是用于更新node版本的工具

$ sudo n stable //安装最新稳定版的nodejs

$ node -v //查看node的版本是否更新了

安装完Truffle之后,执行下面的命令确保其被正确安装了。

$ sudo truffle version

Truffle v5.1.55 (core: 5.1.55)

Solidity v0.5.16 (solc-js)

Node v14.15.1

Web3.js v1.2.9

三、创建并初始化项目

通过如下命令创建并初始化项目:

$ mkdir myproject

$ cd myproject

$ sudo truffle init

Starting init...

================

> Copying project files to /home/yulin/myproject

Init successful, sweet!

初始化完成后的目录结构如下:

contracts/:存放编写的合约。migrations/:存放迁移部署脚本。test/:存放合约测试脚本。truffle-config.js:Truffle的配置文件。

四、创建合约

进入contracts目录,创建Storage.sol合约文件。

$ cd contracts

$ touch Storage.sol

合约的内容如下:

pragma solidity ^0.7.5;

contract Storage {

uint256 public storedData;

function set(uint256 data) public {

storedData = data;

}

function get() public returns (uint256) {

return storedData;

}

}

五、编译合约

使用truffle compile命令编译Storage.sol合约。

遇到问题: 我的solidity版本是0.7.5。错误提醒我的truffle和solc编译器不匹配。 做法:是在truffle-config.js修改成以下内容即可!

$ truffle compile

Compiling your contracts...

===========================

> Compiling ./contracts/Migrations.sol

> Compiling ./contracts/Storage.sol

> Compilation warnings encountered:

/home/yulin/myproject/contracts/Storage.sol:7:5: Warning: Function state mutability can be restricted to view

function get() public returns (uint256) {

^ (Relevant source part starts here and spans across multiple lines).

> Artifacts written to /home/yulin/myproject/build/contracts

> Compiled successfully using:

- solc: 0.5.16+commit.9c3226ce.Emscripten.clang

可以看出,合约编译后的文件会写入/build/contracts目录中,这些合约编译后的文件对于truffle框架能否正常工作至关重要。不用手动修改这些文件,因为即使修改了,再次执行编译命令时又会被覆盖。

Truffle默认只编译自上次编译后被修改过的合约,目的是减少不必要的编译。如果想全部编译,可以使用–all选项。

$ truffle compile --all

合约编译完成后,需要部署Storage.sol合约,在truffle中部署合约需要用到迁移脚本。接着进入migrations目录中为Storage合约创建一个迁移脚本。

六、迁移合约

迁移脚本是由一些Javascript文件组成的,用来帮助把合约发布到以太坊网络中。之所以需要迁移脚本,是因为部署需求会随着时间改变。随着项目的发展,可以创建新的迁移脚本把这些变化的合约部署到区块链上,之前运行的迁移历史记录,会被一个特殊的Migrations.sol合约记录在区块链上。

迁移脚本的命名规则:文件名以数字开头,以一个描述性的后缀结尾。数字前缀是必需的,用于记录移植是否成功。后缀仅是为了提高可读性,以方便理解。

$ cd migrations

$ touch 2_storage_migration.js

文件为2_storage_migration.js:

var Storage = artifacts.require("Storage");

module.exports = function(deployer){

deployer.deploy(Storage);

};

1. arifacts.require()

在迁移脚本开始时,通过arifacts.require()告诉truffle将要和哪个合约交互。这个方法类似于欧NodeJs中的require,但在这里,它返回的是一个合约抽象。可以在迁移脚本的其余部分中使用这个合约抽象。arifacts.require()中使用的名字不是必须与合约源文件的文件名相同,相反,它应该与在合约源代码中定义的合约类的名称不同。

2. module.exports

在迁移脚本最后,通过module.exports导出一个函数,将迁移脚本导出的函数都应该接受一个deploy对象作为其第一个参数。deployer对象中的辅助函数在部署过程中有了清晰的语法,用于部署智能合约及执行一些常见的任务,比如把发布后的对象保存下来供以后使用。这个deployer对象部署任务的主接口。

至此准备工作已经做好,接下来就把Storage.sol部署到区块链上。这里将合约部署到TestRPC环境中。(因为我使用testrpc出现了问题,故我将合约部署到Ganache-cli环境中)。 启动Ganache-cli:

$ ganache-cli

Ganache CLI v6.12.1 (ganache-core: 2.13.1)

Available Accounts

==================

(0) 0x817b21276A314E454D8911b72F2e3eEDc7A4590b (100 ETH)

(1) 0xED2B6Ac7441D9514f979c4e026CEfEc5BD554c3c (100 ETH)

(2) 0x6262E43D56784D5488Ae2b50eD55d534dF306424 (100 ETH)

(3) 0xfBfb2280F9Db37ED10f0c6086299fAC806B89Bc3 (100 ETH)

(4) 0xCfF55d2682d9385614F4ADf4329825df4c2bB960 (100 ETH)

(5) 0x51A6cc07f8b7F2238B4CA17488Fa8B07fb4635C8 (100 ETH)

(6) 0xAccBDE3D4A1D6B9f8149eD264248943B098c98e6 (100 ETH)

(7) 0x3CC022c183B23cc5c7820F7a4892CEa58b056f2A (100 ETH)

(8) 0xEa5680CAf6F18e0B3Dd8b09AABaea368815b97Bf (100 ETH)

(9) 0x08753E3F5e58B5A108898CEa2cb6388a16b1B26a (100 ETH)

Private Keys

==================

(0) 0x32193d3d58fe2162180a4df59630d0ebbcfc9b8a15cca75051ab7487d7f7661d

(1) 0x5729a0dd9403b4253e24b0b8061bde8a649b3dda7e6e40c62f77278ad744626b

(2) 0xd65e049ca3fc405c7904478befcb70503324a8019ab32f82a75eb0b5d494bc1c

(3) 0xafd67abb1872ada2ad298bc1b99970a9ce21394dcab21a5a4007e8bd56f99607

(4) 0x5c0e84154d50a103908f8640647be38e38c1edd1dd0be001e7257242b96351b8

(5) 0xed9ea4b5f9b69eba09e408db3d4341c6754bbc1d3cd7b66a61c31018736203bd

(6) 0x5d0bb0859a2937b75484ad610ab880702e85f19104f21603680c66a0c76a5208

(7) 0x2909705b13a26498ad3deb1f2fbb2c65ed4d8df018eee5061dc2f76ca997b48d

(8) 0x695d539a3a5e2ffb35a36dfb78a01a58fff883cdf08f39209a7a652c8fd1189d

(9) 0x8d24adf5c1456d6e6d7c1b37f7c7a5036efeb39b799e8a234c0b864fefc38d32

HD Wallet

==================

Mnemonic: hub cloth nice artist wall sail decline rice endorse differ area camera

Base HD Path: m/44'/60'/0'/0/{account_index}

Gas Price

==================

20000000000

Gas Limit

==================

6721975

Call Gas Limit

==================

9007199254740991

Listening on 127.0.0.1:8545

ganache-cli启动成功后,回到myproject项目的目录中,执行迁移命令:

$ truffle migrate

Compiling your contracts...

===========================

> Everything is up to date, there is nothing to compile.

Starting migrations...

======================

> Network name: 'development'

> Network id: 1610168223472

> Block gas limit: 6721975 (0x6691b7)

1_initial_migration.js

======================

Deploying 'Migrations'

----------------------

> transaction hash: 0xf3696426daea0a2c20148014fbbf793de1a09360c7dbbee2138c03e38dd8fe76

> Blocks: 0 Seconds: 0

> contract address: 0x64F97533057e353B267f1A4AD6E9085E755B1715

> block number: 1

> block timestamp: 1610172425

> account: 0x817b21276A314E454D8911b72F2e3eEDc7A4590b

> balance: 99.99626074

> gas used: 186963 (0x2da53)

> gas price: 20 gwei

> value sent: 0 ETH

> total cost: 0.00373926 ETH

> Saving migration to chain.

> Saving artifacts

-------------------------------------

> Total cost: 0.00373926 ETH

2_storage_migration.js

======================

Deploying 'Storage'

-------------------

> transaction hash: 0x1967eb25296ca2cd359d0a5242e6d5f8cb293ea3d73fde84ad064c2b5caa79ba

> Blocks: 0 Seconds: 0

> contract address: 0xe4379c94723384f2536f7424bC7f286630922e1c

> block number: 3

> block timestamp: 1610172429

> account: 0x817b21276A314E454D8911b72F2e3eEDc7A4590b

> balance: 99.99329598

> gas used: 105903 (0x19daf)

> gas price: 20 gwei

> value sent: 0 ETH

> total cost: 0.00211806 ETH

> Saving migration to chain.

> Saving artifacts

-------------------------------------

> Total cost: 0.00211806 ETH

Summary

=======

> Total deployments: 2

> Final cost: 0.00585732 ETH

truffle migrate命令会执行所有位于migrations目录内的所有迁移文件。truffle migrate只会执行新创建的迁移。可以使用–reset来重新执行全部迁移脚本。

$ truffle migrate --reset

3. 初始化迁移合约

在之前有提到一个特殊的合约Migration.sol,这里详细了解一下这个合约。为了使用迁移功能,Truffle要求要有一个迁移合约。这个合约必须包含一个特定的接口,对于大多数项目来说,这个合约只会在第一次做迁移的时候被部署,以后都不会做任何的更改了。当第一次使用truffle init来创建一个项目的时候,它会默认创建这个合约。文件名为contracts/Migration.sol。

// SPDX-License-Identifier: MIT

pragma solidity >=0.4.22 <0.8.0;

contract Migrations {

address public owner = msg.sender;

uint public last_completed_migration;

modifier restricted() {

require(

msg.sender == owner,

"This function is restricted to the contract's owner"

);

_;

}

function setCompleted(uint completed) public restricted {

last_completed_migration = completed;

}

}

为了利益迁移的特性,首先必须部署Migration.sol合约。维持创建一下的迁移脚本。名为migrations/1_initial_migration.js。

const Migrations = artifacts.require("Migrations");

module.exports = function (deployer) {

deployer.deploy(Migrations);

};

要部署其他合约,可以使用递增数字变换前缀来创建新的迁移脚本。

4. 部署器(deployer)

迁移脚本会使用deployer对象来组织部署任务。deployer对象会同步执行部署任务,隐藏可以按顺序编写部署任务。

//先部署A,再部署B

deployer.deploy(A);

deployer.deploy(B);

另外,deployer上的每一个函数都会返回一个promise,通过promise可以把有执行顺序依赖关系的部署任务组成队列。

//先部署A,然后部署B,把A部署后的地址传给B

deployer.deploy(A).then(function(){

return deployer.deploy(B, A.address);

});

5. deployer API

deployer对象中包含许多方法,可以用来简化迁移工作。 (1)deployer.deploy(CONTRACT, ARGS…,OPTIONS) 这个API是用来部署合约的。contract参数传入需要部署的合约名字;args参数传入合约的构造函数需要的参数;options是一个可选参数,它的值是{overwrite:true/false}。如果overwrite被设置成false,那么当合约之前已经部署过了,这个deployer就不会再部署这个合约了,这在一个合约的依赖由一个外部合约地址提供的情况下是有用的。

为了快速进行部署多个合约,可以向deployer.deploy(…)函数中传入一个或多个数组。例子:

// 部署单个合约,不带任何构造参数

deployer.deploy(A);

// 部署单个合约带有构造参数

deployer.deploy(A, arg1, arg2, ...);

// 部署多个合约,一些带构造参数,一些不带构造参数.

// 比写3次 `deployer.deploy()` 语句更快, 因为deployer可以把所有的合约部署都一次性打包提交

deployer.deploy([

[A, arg1, arg2, ...],

B,

[C, arg1]

]);

// 外部依赖的例子:

//

// overwrite: false 表示,如果 SomeDependency 合约之前已经被部署过,那么不在重新部署,直接使用之前已部署好的地址

// 如果我们的合约要运行在自己的测试链上,或者将要运行的链上没有SomeDependency合约,

// 那么把overwrite: false改成overwrite: true,表示不在检查之前SomeDependency有没有部署过,一律覆盖部署。

deployer.deploy(SomeDependency, {overwrite: false});

(2) deployer.link(LIBRARY, DESTINATIONS)把一个已部署好的库链接到一个或多个合约里。destinations 可以传入一个合约,也可以传入一组合约。 如果 destinations中的某个合约不依赖这个库,那deployer 的link函数就会忽略这个合约。

// 部署库LibA,然后把LibA 链接到合约B,然后部署合约B.

deployer.deploy(LibA);

deployer.link(LibA, B);

deployer.deploy(B);

//库LibA链接到多个合约

deployer.link(LibA, [B, C, D]);

(3) deployer.then(function() {…})在迁移过程中使用它调用特定合约的函数来部署新的合约,为已部署的合约做一些初始化工作等。例子:

var a, b;

deployer.then( function() {

// 部署合约A的一个新版本到网络上

return A.new();

}).then( function(instance) {

a=instance;

// 获取已部署的合约B的实例

return B.deployed();

}).then( function(instance) {

b=instance;

// 使用合约B的setA()方法设置A的地址的新实例.

return b.setA(a.address);

});

(4) 网络相关在执行迁移时,迁移脚本会把truffle.js里配置的networks传递给你,你可以在module.exports导出函数中第二个参数位置接受这个值。文件:truffle.js:

module.exports = {

networks: {

development: {

host: "localhost",

port: 8545,

network_id: "*" // Match any network id

}

}

};

在迁移脚本中接收network:

module.exports=function(deployer, network) {

if(network=="live") {

// 当不在"live"的网络上的时候,做一些特定的操作.

} else{

// 当在的时候,做一些其他的操作.

}

}

(5) 可用的账户在执行迁移时,迁移脚本会把当前以太坊客户端或web3.provider中可用的账户列表传递给你,这个列表与web3.eth.getAccounts()返回的账户列表完全一样。你可以在module.exports导出函数中第三个参数位置接受这个值。

module.exports=function(deployer, network, accounts) {

//在你的迁移脚本中使用账户

}

优惠劵

Famidlistimo

关注

关注

4

点赞

13

收藏

觉得还不错?

一键收藏

知道了

1

评论

【区块链开发入门】(四) Truffle详解篇1

目录一、什么是Truffle二、安装Truffle一、什么是TruffleTruffle是针对基于以太坊的Solidity语言的一套开发框架。本身基于Javascript。Truffle是一个世界级的开发环境,测试框架,以太坊的资源管理通道,旨在让以太坊上的开发变得简单,Truffle有以下:内置的智能合约编译,链接,部署和二进制文件的管理。利用快速开发的自动合约测试。可脚本化的,可扩展的部署与发布框架。网络管理,用于部署到任意数量的公网或私网的网络环支持持续集成可配置构建管道。与合约直接

复制链接

扫一扫

专栏目录

区块链(三、Truffle使用)

funtaster的博客

08-12

5435

Truffle是什么?

Truffle是基于基于Javascript,对于以太坊Solidity语言的一套开发框架,目的是为了让开发更容易。有一下功能:

●内置的智能合约编译,链接,部署和二进制文件的管理。

●快速开发下的自动合约测试。

●脚本化的,可扩展的部署与发布框架。

●部署到不管多少的公网或私网的网络环境管理功能

●使用EthPM&NPM提供的包管理,使用ERC190标准。

●与合约直接通信的直接交互控制台(写完合约就可以命令行里验证了)。

●可配的构建流程,支持紧密集成。

●在Truf

以太坊 Truffle实战

2301_77819978的博客

04-24

124

整个过程主要演示chrome扩展 METAMASK, OpenZepplin库和truffle框架的使用。

1 条评论

您还未登录,请先

登录

后发表或查看评论

Truffle详解

培根芝士的专栏

12-28

1913

以太坊最受欢迎的开发框架是使用web3.js的Truffle。

Truffle使用以太坊虚拟机(EVM)为区块链提供世界一流的开发环境、测试框架和资产管道,旨在让开发人员的生活更轻松。

内置智能合约编译、链接、部署和二进制管理。

快速开发的自动化合约测试。

脚本化、可扩展的部署和迁移框架。

用于部署到任意数量的公共和专用网络的网络管理。

使用EthPM和NPM进行软件包管理,使用ERC190标准。

用于直接合约通信的交互式控制台。

支持紧密集成的可配置构建管道。

在Truffle环境中执行

以太坊区块链积分系统truffle项目源代码

09-06

以太坊区块链积分系统truffle项目源代码,本人注释过了,最重要的文件是Score.sol 和 app.js ,可以帮助学习以太坊dapp开发

Solidity-以太坊区块链-Truffle-webpack-开发入门 (一) 环境配置

01-07

前言:

本教程全部来自官网,去年2018年底翻译了全部的文档,过了一年了我对当初的学习没什么印象了,不知道有没有错,但确定的是区块链模拟成功的了,所以大家基本不用担心我的笔记有什么大问题,现在2019年底了,我就把我去年的翻译笔记都拿出来分享给大家。共同进步!

笔记截图:

注:本教程使用以太坊的truffle框架在testrpc环境中模拟

系统:Mac OS (windows系统只作为参考)

1. 首先安装nodejs

 到官网下载安装即可  http://nodejs.cn/download/

安装之后在终端查看是否安装成功:

$ node -v

如顺利出现版本信息,就表示成功了(失败的

solidity-以太坊区块链Truffle-webpack开发入门 (四) 编写和编译合约

01-20

编译合约     原文地址

编译的命令:

$ truffle compile

这个命令会编译所有contracts目录下的.sol文件,如果在上次编译之后没有改变的的文件不会被重新编译

如果需要重新编译,使用命令:

$ truffle compile —all

*自定义供合约使用的函数库 lib文件也使用.sol结尾

编译后的文件

编译后的文件会被放在build/contracts目录下,这些文件是不能被手动修改的,应该有compiler自动生成

合约的依赖文件的使用方式

使用import命令在contract中倒入依赖包:

import “./AnotherContract.sol”;

这个

Truffle最受欢迎的区块链开发框架

08-08

Truffle - 是以太坊的开发环境,测试框架和资产管道,旨在解放太坊开发人员。

Truffle 开发入门

StevenX5

01-06

1250

Truffle 是一个以太坊智能合约集成开发框架。Truffle 使用以太坊虚拟机(EVM)为区块链提供了世界级的开发环境、测试框架和资产管道,旨在让开发人员的工作更轻松。本文我们从一个 Truffle 官方示例入手,带你快速了解利用 Truffle 开发区块链项目的基础知识,包括 Truffle 项目的创建,智能合约的编译与部署,以及 Truffle 与智能合约进行交互实现区块链上的交易。

以太坊开发框架——Truffle的基础使用

热门推荐

david2000999的博客

09-25

1万+

这里写目录标题TruffleTruffle 简介Truffle 的客户端安装Truffle创建项目Migrationartifacts.require()exports 的函数deployer 对象更新 migration 文件更新 truffle 配置文件创建账户(可用 metamask 上账户转币)部署新建 JavaScript 文件 app/scripts/index.js

Truffle

Truffle 简介

truffle unbox webpack 一条命令由于要下载众多需要的模块,大概耗时 1

使用Truffle编译智能合约及所遇到的问题

henulmh的博客

09-06

3059

解决方式:solidity版本问题,别选太高,好像是8的话address不支持可支付需要带payable,但带上payable,truffle编译合约会报这个错误。migration有关的脚本代码都保存在Truffle的migrations目录,初始时该目录下有一个1_initial_migration.js文件,用来部署Migrations.sol自身。解决方式:选用6版本以上的solidity,并在truffle-config文件中绑定。配置本地以太坊网络和远程的以太坊测试网络方式有所差异,可见上方。

truffle入门(一)--【区块链】

m0_72435337的博客

07-25

402

下载安装nodejs,快速入门truffle进行测试

solidity-以太坊区块链Truffle-webpack开发入门 (十四) 网络和应用部署

01-08

网络和应用部署

原文连接

即使最小的dapp也会有两个区块,一个放在开发机器上,一个发布出去(放在公网Ethereum或者是私链上),truffle有一套系统可以分别管理每个网络上的编译和部署,指定一个网络部署合约:

$ truffle migrate --network live

当指定了一个新的网络部署时,编译后的文件 ./build/contracts 中的.json文件会自动更新,在其中会记录每个网络对应的合约配置信息,当运行时会根据连接的网络自动启用相应的合约。

因为在合约的编译文件运行时会自发现网络,所以你只需要部署一次合约,运行的Ethereum客户端会决定使用哪个合约的编译文

Truffle官方文档中文版

03-07

以太坊DApp开发框架Truffle的官方文档的中文版本。必备。

区块链学习(四)truffle部署编译智能合约以太坊私有链

06-30

1023

前面我们介绍了以太坊私有链的搭建以及多节点私有链网络,这次我们介绍如何使用truffle框架来部署编译智能合约到我们之前搭建的私有链网络中。

搭建环境及需使用的工具:ubuntu18.04Truffle v5.0.18 geth1.8.27Nodev10.16.0

solc 0.5.8+commit.23d335f2.Linux.g++

在我们部署一个简单的合约之前...

如何使用Truffle开发太坊智能及其区块链

m0_66117547的博客

04-23

1032

truffle是以太坊(ethereum)开发智能合约(smart contract)过程中最受欢迎的框架,本教程来安装构建一个基本的Truffle项目并部署一个智能合约到区块链。truffle是以太坊(ethereum)开发智能合约(smart contract)过程中最受欢迎的框架,本教程来安装构建一个基本的Truffle项目并部署一个智能合约到区块链。开始本文之前希望你已经了解区块链、以太坊、智能合约等基本概念。

【区块链-智能合约工程师】第四篇:Truffle框架安装和介绍(Windows)

soldi_er的博客

01-03

2784

Truffle 是目前最流行的以太坊 DApp 开发框架,(按照官网说法)是一个世界级的开发环境和测试框架,也是所有使用了 EVM 的区块链的资产管理通道,它基于 JavaScript,致力于让以太坊上的开发变得简单。内置的智能合约编译,链接,部署和二进制文件的管理。合约自动测试,方便快速开发。脚本化的、可扩展的部署与发布框架。可部署到任意数量公网或私网的网络环境管理功能使用 EthPM 和 NPM 提供的包管理,使用 ERC190 标准。

以太坊:Truffle 概述

跨链技术践行者

05-09

1万+

Truffle 概述

Truffle 是一个在以太坊进行 DApp 开发的世界级开发环境、测试框架。它在使开发人员更轻松。这里有几篇博客让我们了解如何开发DApp:

开发、部署第一个去中心化应用 (Dapp) - 宠物商店

使用 Truffle 开发以太坊投票 DAPP

DApp 教程:用 Truffle 开发一个链上记事本

使用 Truffle 开发有一以下优...

truffle

henulmh的博客

08-04

2324

Truffle套件是一个开发以太坊 (Ethereum) 区块链DApp (分布式应用程序) 的开发环境,是开发DApp的一站式解决方案,功能包括:编译合约、部署合约、开发DApp前端、测试DApp等。

truffle使用

weixin_44932880的博客

05-17

3075

1.下载

npm install -g truffle

2.使用

创建没有合约的空工程

truffle init

或下载模板

truffle unbox metacoin

在操作完成之后,就有这样的一个项目目录结构:

contracts/: Solidity合约目录

migrations/: 部署脚本文件目录

test/: 测试脚本目录

truffle-config.js: Truffle 配置文件

编译合约

truffle compile

仅编译自上次编译以来有更改的合约。 如果我们想覆盖此行为

vue + truffle

最新发布

01-14

Vue + Truffle是一种常用的组合,用于创建以太坊Dapp(去中心化应用程序)。Vue是一个流行的JavaScript框架,用于构建用户界面,而Truffle是一个用于开发以太坊智能合约的开发框架。结合使用Vue和Truffle可以轻松地构建具有交互性和响应性的以太坊Dapp。

以下是使用Vue + Truffle创建以太坊Dapp的步骤:

1. 安装Truffle和Ganache:

Truffle是一个用于开发以太坊智能合约的开发框架,而Ganache是一个用于在本地开发和测试以太坊应用程序的个人区块链。

```shell

npm install -g truffle

npm install -g ganache-cli

```

2. 创建一个新的Truffle项目:

在命令行中,进入你想要创建项目的目录,并执行以下命令:

```shell

truffle init

```

3. 创建一个新的Vue项目:

在命令行中,进入你想要创建项目的目录,并执行以下命令:

```shell

vue create my-dapp

```

4. 配置Truffle项目:

在Truffle项目的根目录下,打开truffle-config.js文件,并进行以下配置:

- 配置网络:将网络配置为连接到Ganache个人区块链。

- 配置合约:将合约编译和部署到以太坊网络。

5. 编写智能合约:

在Truffle项目的contracts目录下,编写你的智能合约。

6. 编写Vue组件:

在Vue项目的src目录下,编写你的Vue组件,用于与智能合约进行交互。

7. 部署智能合约:

在命令行中,进入Truffle项目的根目录,并执行以下命令来部署智能合约:

```shell

truffle migrate

```

8. 运行Vue项目:

在命令行中,进入Vue项目的根目录,并执行以下命令来运行Vue项目:

```shell

npm run serve

```

现在,你已经成功地使用Vue + Truffle创建了一个以太坊Dapp。你可以在Vue组件中调用智能合约的方法,并与以太坊网络进行交互。

“相关推荐”对你有帮助么?

非常没帮助

没帮助

一般

有帮助

非常有帮助

提交

Famidlistimo

CSDN认证博客专家

CSDN认证企业博客

码龄5年

暂无认证

40

原创

5万+

周排名

170万+

总排名

9万+

访问

等级

949

积分

778

粉丝

84

获赞

81

评论

531

收藏

私信

关注

热门文章

CDH、HDH、IDH、DDH、BDH、DBDH假设的概念

13175

群、环、域知识点整理(持续补充ing)

7071

【待解决】Hyperledger Fabric开发中生成Channel时出现Error: Post “https://localhost:7053/participation/v1/channels“

7010

Latex中如何另取一页

5342

【2020年保研夏令营分享】武大网安、厦大计算机、东南网安

4654

分类专栏

区块链

14篇

Hyperledger

10篇

数据库

其他

1篇

信息安全数学

4篇

C++

2篇

夏令营

1篇

数据结构

7篇

编译原理

1篇

LaTeX

3篇

Machine Learning

1篇

Paper

1篇

计算机网络

1篇

windows

3篇

最新评论

Fabric 2.2.0上搭建Hyperledger caliper进行性能测试

weixin_44797738:

大佬我想请教您,可以随便绑定一个与自己运行的Fabric版本不一样的SUT吗?我自己使用的fabric版本是2.5,可是caliper最高SUT的绑定是2.4

Fabric 2.2.0上搭建Hyperledger caliper进行性能测试

weixin_44797738:

谢谢大佬 很有帮助

Fabric 2.2.0上搭建Hyperledger caliper进行性能测试

JDBaby:

请问楼主,我在运行最后一步的时候报了这个错误,这个应该如何修改呢?Error: Failed to connect before the deadline on Endorser- name: peer0.org1.example.com, url:grpcs://localhost:7051, connected:false, connectAttempted:true

CDH、HDH、IDH、DDH、BDH、DBDH假设的概念

m0_74362852:

老妈身上的装备我

【Hyperledger Fabric入门】(二) Fabric账号服务器:Fabric-ca

qq_51236576:

我想请问一下作者,如果用cryptogen工具生成的证书文件,想利用CA注册用户,需要重新用CA生成组织文件嘛

大家在看

2024年需要重点关注的15种计算机病毒

Linux 相关命令

220

Java+SSM+JSP高校宿舍管理系统源码+论文+答辩PPT

142

LVS+Keepalived 高可用负载均衡集群

546

20240307-1-前端开发校招面试问题整理JavaScript

最新文章

【已解决】NO_PEERS_FOUND. Description: targets were not provided

Fabric 2.2.0上搭建Hyperledger caliper进行性能测试

docker方式简单部署blockchain-explorer

2021年14篇

2020年29篇

目录

目录

分类专栏

区块链

14篇

Hyperledger

10篇

数据库

其他

1篇

信息安全数学

4篇

C++

2篇

夏令营

1篇

数据结构

7篇

编译原理

1篇

LaTeX

3篇

Machine Learning

1篇

Paper

1篇

计算机网络

1篇

windows

3篇

目录

评论 1

被折叠的  条评论

为什么被折叠?

到【灌水乐园】发言

查看更多评论

添加红包

祝福语

请填写红包祝福语或标题

红包数量

红包个数最小为10个

红包总金额

红包金额最低5元

余额支付

当前余额3.43元

前往充值 >

需支付:10.00元

取消

确定

下一步

知道了

成就一亿技术人!

领取后你会自动成为博主和红包主的粉丝

规则

hope_wisdom 发出的红包

实付元

使用余额支付

点击重新获取

扫码支付

钱包余额

0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。 2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

【Truffle】一、Truffle的安装与部署_truffle安装-CSDN博客

>

【Truffle】一、Truffle的安装与部署_truffle安装-CSDN博客

【Truffle】一、Truffle的安装与部署

奈何不吃鱼

已于 2023-10-28 09:41:31 修改

阅读量1.9k

收藏

6

点赞数

7

分类专栏:

Truffle 

文章标签:

区块链

solidity

truffle

智能合约

测试

压力测试

于 2023-10-27 23:46:15 首次发布

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

本文链接:https://blog.csdn.net/naihe_fish/article/details/134084390

版权

Truffle 

专栏收录该内容

4 篇文章

0 订阅

订阅专栏

目录

一、准备安装

二、安装truffle

三、创建 Truffle 项目工程

        1.为 Truffle 项目创建新目录:

        2.下载 (“unbox”) MetaCoin box:

四、项目分析

五、测试合约 

一、准备安装

        安装truffle必须要提前配置Nodejs环境,关于Nodejs的配置,我在之前的文章中提到过版本管理方式,屡试不爽,移步这里查看:【Linux】Ubuntu升级nodejs版本-CSDN博客

        需要注意的是,nodejs的版本在官方文档的要求是 v8.9.4 或 之后的版本,然而在实际安装部署Truffle时,尽量建议大家选择更高的版本,避免出现下图的问题!

二、安装truffle

        这里我就以nodejs的20版本为例,开始安装Truffle

        

        确定环境准备完成后,执行下面这条命令安装Truffle

npm install -g truffle

        安装完成后 ,我们便可以创建工程啦

三、创建 Truffle 项目工程

        1.为 Truffle 项目创建新目录:

mkdir MetaCoin

cd MetaCoin

        2.下载 (“unbox”) MetaCoin box:

truffle unbox metacoin

         这里是下载官方提供的一个合约工程,我们在后期熟练之后可以直接运行truffle init创建一个空的工程

         这里如果下载失败了就直接运行此命令,下载的样例代码一样

git clone https://github.com/truffle-box/metacoin-box.git

在操作完成之后,就有这样的一个项目目录结构:

contracts/: 智能合约的存放目录 migrations/: 部署脚本目录 test/: 测试脚本目录 truffle-config.js: Truffle配置文件

四、项目分析

        我们下载的这个测试用例,已经是一个比较完整的项目体系了,接下来我们对这个项目结构进行分析

        

contracts:此目录存放所有需要测试的智能合约,一共有两个合约migrantions:此目录存放了一个部署合约脚本test:目录下存放了测试合约的脚本truffle-config.js:truffle的配置文件,可以修改一些基本信息,也可以引入第三方插件

五、测试合约 

        正常的流程为:truffle develop(启用测试网络) => compile(编译合约) => migrate(部署合约) => test(测试合约)

        我们依次执行命令

truffle develop

compile

migrate

test 

        直接运行test是执行所有测试脚本

        测试全部通过 ,至此,合约测试结束

优惠劵

奈何不吃鱼

关注

关注

7

点赞

6

收藏

觉得还不错?

一键收藏

打赏

知道了

8

评论

【Truffle】一、Truffle的安装与部署

需要注意的是,nodejs的版本在官方文档的要求是 v8.9.4 或 之后的版本,然而在实际安装部署Truffle时,尽量建议大家选择更高的版本,避免出现下图的问题!正常的流程为:truffle develop(启用测试网络) => compile(编译合约) => migrate(部署合约) => test(测试合约)这里是下载官方提供的一个合约工程,我们在后期熟练之后可以直接运行truffle init创建一个空的工程。这里我就以nodejs的20版本为例,开始安装Truffle。

复制链接

扫一扫

专栏目录

truffle使用指南

10-16

dapp开发神器truffle,支持合约编译,部署,调试,简化dapp开发

Win10 搭建truffle框架

qq_50938817的博客

10-04

986

在64位Win10系统系统下,从零开始搭建truffle框架

8 条评论

您还未登录,请先

登录

后发表或查看评论

以太坊学习路线——(四、上)Truffle安装、truffle项目创建、编译、部署

菜鸟博客

04-06

2890

这篇博客演示的基本操作系统环境是CentOS 7,参考书籍:以太坊开发实战——以太坊关键技术与案例分析 第十章(吴寿鹤、冯翔、刘涛、周广益 著)。鉴于内容较多,分成两篇,下一篇博文请见:以太坊学习路线——(四、下)truffle项目合约交互、合约测试、配置文件、依赖管理

文章结构:

一、Truffle简介

二、安装Truffle

三、创建并初始化项目

四、创建合约

五、编译合约

...

使用Truffle时遇到的问题和解决方法

01-07

问题1

错误信息

Error: CompileError: /C/Users/media/ethereum_work/course3/contracts/Ballot.sol:1:1: ParserError: Source file requires different compiler version (current compiler is 0.5.12+commit.7709ece9.Emscripten.clang – note that nightly builds are considered to be strictly less than the released versi

truffle-starter-kit:一个使用 Chainlink 的智能合约示例

07-24

Chainlink 松露盒

要求

新产品管理

安装

安装松露

npm install truffle -g

设置仓库

mkdir MyChainlinkProject

cd MyChainlinkProject/

拆箱

truffle unbox smartcontractkit/box

通过运行安装依赖项:

npm install

# OR...

yarn install

测试

npm test

部署

为了部署到 kovan 网络,Truffle 将使用truffle-hdwallet-provider作为您的助记符和一个 RPC URL。 在运行之前设置环境变量$RPC_URL和$MNEMONIC $RPC_URL :

npm run migrate:kovan

您还可以运行:

truffle migrate --network kovan --reset

如果你想使用

【区块链-智能合约工程师】第四篇:Truffle框架安装和介绍(Windows)

soldi_er的博客

01-03

2784

Truffle 是目前最流行的以太坊 DApp 开发框架,(按照官网说法)是一个世界级的开发环境和测试框架,也是所有使用了 EVM 的区块链的资产管理通道,它基于 JavaScript,致力于让以太坊上的开发变得简单。内置的智能合约编译,链接,部署和二进制文件的管理。合约自动测试,方便快速开发。脚本化的、可扩展的部署与发布框架。可部署到任意数量公网或私网的网络环境管理功能使用 EthPM 和 NPM 提供的包管理,使用 ERC190 标准。

truffle 安装教程

weixin_44565776的博客

01-07

1354

truffle 安装教程

如何在windows11上安装智能合约Truffle框架

weixin_52943021的博客

05-29

284

新建系统变量:NODE_PATH/D:\npm\node_modules,PATH变量中添加值D:\npm\myNodelobal。首先要安装nodejs环境版本必须18以上,这个是最常见的,就不多说。1.全局安装ganache-cli节点仿真器:v6.12.2。2.全局安装solc编译器:solc@0.8.17。3.全局安装web库:web3@1.8.1。第二步设置安装模块和缓存文件的目录。4.全局安装truffle开发框架。5.全局安装webpack打包器。好了,可以编写智能合约代码。

Truffle(部署+测试)

m0_46635662的博客

11-08

384

这里我就以nodejs的16版本为例,开始安装Truffle确定环境准备完成后,执行下面这条命令安装Truffle安装vscode 插件,下载完成会多一个这个标志,然后点进去,检测让你下载几个东西,按照提示下载即可。

Windows10下安装Truffle工具

xuecuilan的博客

05-20

6478

首先安装好node和npm,因为ganache是用JavaScript编写的,并通过node包中的npm,如下:

注意:这里最好安装和我一样的版本,免得因为版本问题导致一些未知的错误!!!

接下来安装Truffle

npm install -g truffle

首先遇到的问题如下:报错说没有python环境

解决没有python环境的问题:

我们选择安装windows-bu...

truffle_eth_class2

02-05

扎实的DApp开发课程资料

这是您在本课程中编写的所有代码的官方存储库。

该课程可在有限时间内找到,价格为15美元: :

范围

该代码的范围旨在显示您可以在Solidity,以太坊,Web3,Truffle,以太坊Studio等中实现的目标。特别是:

演示如何使用以太坊区块链

Web3

倾听并对特定事件做出React

编写测试用例

部署DApp

使用混音

使用MetaMask

使用Truffle和WebPack

安装说明

格思

从为您的平台下载geth

Geth Mac-OS:

将下载zip中的“ geth”文件复制到以下文件夹中:

“ / usr / local / bin

create-truffle-dapp:无需配置即可创建和部署Truffle项目

02-05

创建松露Dapp

介绍

创建Truffle Dapp的目的是帮助开发人员无需配置即可创建和部署Truffle项目。 创建松露Dapp将:

使用模板合同,测试文件和相应的迁移文件创建Truffle项目

使用您的项目ID和钱包助记符创建一个现成的部署文件

此外,密实度棉绒(如或)配置文件也可以被创建。

Create Truffle Dapp应该可以在Windows,Macos和Linux上运行。 如果无法解决请。

在你开始之前

首先,请确保在计算机上安装了 , 和 。 您可能还需要棉短绒,如 ,或 。

安装

使用以下命令全局安装Create Truffle Dapp:

npm install

harmony-box:和谐的松露盒-使用Truffle和本地以太坊工具将智能合约部署到Harmony

05-15

和声盒

Harmony Box是一个Truffle框,可让您使用Truffle和本机以太坊工具快速启动并运行在Harmony上部署智能合约。

入门

松露

如果您在全球范围内安装了Truffle:

(直到包装盒被Truffle批准,您必须依靠下面的git安装步骤)

mkdir harmony && cd harmony

truffle unbox harmony

或者,如果您想通过git安装:

git clone https://github.com/harmony-one/harmony-box.git

cd harmony-box

.env

将.env-example复制到.env:

cp .env-example .env

修改.env并将每个网络的“ ENTER_PRIVATE_KEY_HERE ”替换为您要在部署合同时使用的相应私钥。

依存关系

使用yarn安装所有

章鱼网络进展月报 | 2024.2.1-2.29

最新发布

OctopusNetwork的博客

03-06

461

Omnity 首先支持 Runes 资产跨链。

多重验证及比特币脚本中的P2PK、P2PKH、P2SH机制

weixin_52421133的博客

03-03

760

总结来说,二重验证为加密货币资产提供了一种更高级别的安全保障,而比特币赎回脚本系统中的P2PK、P2PKH、P2SH交易类型,则从不同的维度优化了交易过程,既保证了安全性又提升了效率。深入理解和掌握这些概念和技术,有助于我们在数字货币世界中更好地保障资产安全,应对日益复杂的交易需求。未来,随着区块链技术的发展,我们期待看到更多创新的验证机制和交易形式的出现。

【01】区块链科普100天-模块化区块链

总要有点可以骄傲的东西

02-29

641

这不仅减轻了主链的负担,也为开发者提供了更大的灵活性和创新空间。lgnis是基于Ardor公链的一个子链,母子链架构增强了网络性能,而且提供了更高的灵活性,这种架构不仅增强了网络的性能,而且提供了很高的灵活性,适合快速发展和部署DApp。1.层次架构:传统区块链将所有任务,如交易处理、共识机制、数据存储等集成在单一层中,模块化区块链将这些功能分割成独立的层,实现更高效的处理和升级。2.可拓展性:模块化区块链中,不同功能的隔离提高了整体网络的安全性,即使某一模块出现安全问题,也不会影响整个网络。

如何做代币分析:以 USDC 币为例

m0_60517769的博客

03-06

285

USDC 是最透明和值得信赖的稳定币之一,因为每个流通中的 USDC 代币都有相应数量的美元储备。

什么是区块链粉尘攻击?

J_Lee

03-02

970

什么是区块链粉尘攻击?

Kakarot:当今以太坊的未来

mutourend的博客

03-06

873

Kakarot:当今以太坊的未来

truffle部署合约

09-13

您好!感谢您的提问!来自 C 知道的我将为您解答关于使用 Truffle 部署合约的问题。

要使用 Truffle 部署合约,您可以按照以下步骤进行操作:

1. 首先,确保您已经在您的项目中安装了 Truffle。如果没有安装,可以通过运行以下命令进行安装:

```

npm install -g truffle

```

2. 确保您已经在项目目录中初始化了 Truffle,可以通过运行以下命令完成初始化:

```

truffle init

```

3. 在项目目录中,您需要在 `contracts` 文件夹中编写您的智能合约代码。例如,您可以创建一个名为 `MyContract.sol` 的文件,并编写您的合约代码。

4. 在部署合约之前,您需要配置 Truffle 的网络设置。打开项目目录中的 `truffle-config.js`(或 `truffle.js`,取决于您的项目版本),并根据需要配置网络。例如,您可以添加一个名为 "development" 的网络配置:

```javascript

module.exports = {

networks: {

development: {

host: "localhost",

port: 8545,

network_id: "*",

}

},

};

```

5. 在部署之前,您可以通过运行以下命令来编译您的合约:

```

truffle compile

```

6. 最后,您可以使用以下命令来部署合约:

```

truffle migrate --network development

```

上述命令将在您配置的 "development" 网络上部署合约。如果您配置了其他网络,请相应地更改命令中的网络名称。

这就是使用 Truffle 部署合约的基本步骤。希望能对您有所帮助!如果您有任何其他问题,请随时提问。

“相关推荐”对你有帮助么?

非常没帮助

没帮助

一般

有帮助

非常有帮助

提交

奈何不吃鱼

CSDN认证博客专家

CSDN认证企业博客

码龄1年

暂无认证

43

原创

16万+

周排名

3万+

总排名

5万+

访问

等级

767

积分

753

粉丝

246

获赞

61

评论

250

收藏

私信

关注

热门文章

【Linux】解决缓存锁问题:无法获得锁 /var/lib/dpkg/lock-frontend

4733

【FISCO-BCOS】 六、节点黑白名单操作

4120

IntelliJ IDEA创建javaweb项目入门级教程

3149

【Vue】从零开始创建一个Vue项目(详细步骤)

2730

【Linux】Ubuntu升级nodejs版本

2246

分类专栏

FISCO BCOS

付费

20篇

Vue学习

2篇

Truffle 

4篇

Github

2篇

问题解决

5篇

solidity合约案例

3篇

Linux

5篇

openstack

2篇

JavaWeb

1篇

java小题目

1篇

最新评论

【FISCO-BCOS】十四、使用Caliper进行压力测试fisco-bcos

imomsc_csdn:

您好大佬,请问在第四步时对npm进行初始化时,出现了报错,说权限不够,但用sudo权限之后又显示node: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.28' not found (required by node)。请问您之前遇到过类似的情况吗?谢谢

OpenSSL:提示检测失败:Please install openssl!use “openssl version“ commond to check.

奈何不吃鱼:

就是用vim或者vi,把build_chain.sh其中一行对openssl的版本要求改成你自己的版本即可

OpenSSL:提示检测失败:Please install openssl!use “openssl version“ commond to check.

2301_82051277:

请问怎么改啊 第二个步骤看不懂

OpenSSL:提示检测失败:Please install openssl!use “openssl version“ commond to check.

wbint:

请问为什么我改了之后还是提示“[INFO] Use "openssl version" command to check.”

【FISCO BCOS】十九、区块链浏览器部署

小梁说代码:

受益了,支持博主!

您愿意向朋友推荐“博客详情页”吗?

强烈不推荐

不推荐

一般般

推荐

强烈推荐

提交

最新文章

【Vue】二、Vue 组件展示控制的优雅解决方案

【Github】如何创建一个自己的仓库

【GitHub】ssh: connect to host github.com port 22: Connection refused

2024年3篇

2023年40篇

目录

目录

分类专栏

FISCO BCOS

付费

20篇

Vue学习

2篇

Truffle 

4篇

Github

2篇

问题解决

5篇

solidity合约案例

3篇

Linux

5篇

openstack

2篇

JavaWeb

1篇

java小题目

1篇

目录

评论 8

被折叠的  条评论

为什么被折叠?

到【灌水乐园】发言

查看更多评论

添加红包

祝福语

请填写红包祝福语或标题

红包数量

红包个数最小为10个

红包总金额

红包金额最低5元

余额支付

当前余额3.43元

前往充值 >

需支付:10.00元

取消

确定

下一步

知道了

成就一亿技术人!

领取后你会自动成为博主和红包主的粉丝

规则

hope_wisdom 发出的红包

打赏作者

奈何不吃鱼

你的鼓励将是我创作的最大动力

¥1

¥2

¥4

¥6

¥10

¥20

扫码支付:¥1

获取中

扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元

使用余额支付

点击重新获取

扫码支付

钱包余额

0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。 2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

用以太坊开发框架Truffle开发智能合约实践攻略(代码详解) - 知乎

用以太坊开发框架Truffle开发智能合约实践攻略(代码详解) - 知乎首发于HiBlock区块链社区切换模式写文章登录/注册用以太坊开发框架Truffle开发智能合约实践攻略(代码详解)yaoyao路是什么,走着走着就知道了1TRUFFLE是什么?Truffle是一个世界级的开发环境,测试框架,以太坊的资源管理通道,致力于让以太坊上的开发变得简单,Truffle有以下:内置的智能合约编译,链接,部署和二进制文件的管理。快速开发下的自动合约测试。脚本化的,可扩展的部署与发布框架。部署到不管多少的公网或私网的网络环境管理功能使用EthPM&NPM提供的包管理,使用ERC190标准。与合约直接通信的直接交互控制台(写完合约就可以命令行里验证了)。可配的构建流程,支持紧密集成。在Truffle环境里支持执行外部的脚本。【说明】更多以太坊术语可参考此篇文章:https://www.jianshu.com/p/03666198619d1.1 TRUFFLE的安装在Ubuntu命令上窗口输入以下命令,完成安装:$ npm install -g truffle如果安装成功,可输入truffle version名称,正常情况下会有版本显示:truffle version环境要求NodeJS 5.0+Windows,Linux(推荐Ubuntu),或Mac OS XTruffle客户端有许多的以太坊客户端可以选择。我们推荐在开发和部署时使用不同客户端。适用开发的客户端EtherumJS TestRPC当开发基于Truffle的应用时,我们推荐使用EthereumJS TestRPC。它是一个完整的在内存中的区块链仅仅存在于你开发的设备上。它在执行交易时是实时返回,而不等待默认的出块时间,这样你可以快速验证你新写的代码,当出现错误时,也能即时反馈给你。它同时还是一个支持自动化测试的功能强大的客户端。Truffle充分利用它的特性,能将测试运行时间提速近90%。适用正式发布的客户端Geth (go-ethereum)WebThree(cpp-ethereum)More对此有许多官方和非官方的以太坊客户端可供选择。最好使用TestRPC客户端充分测试后,再使用这些客户端。这些是完整的客户端实现,包括挖矿,网络,块及交易的处理,Truffle可以在不需要额外配置的情况下发布到这些客户端。当发布到私有网络中私人网络中使用了相同的技术,但却有不同的配置。所以你可以将上面提及的客户端来运行一个私有的网络,部署到这样的网络也是使用同样的方式。【说明】作者使用TestRPC和 Geth (go-ethereum)这2种客户端,他们的安装方式参考文章:https://www.jianshu.com/p/683ea7d62a392下载TRUFFLE MetaCoin样例进行环境搭建实战2.1 MetaCoin初始化我们假设前面的安装和环境搭建已全部成功,此时应该可以直接使用命令truffle了,下面我们建立一个工作间truffle-workspace,然后在工作间执行:mkdir MetaCoin

cd MetaCoin

truffle unbox metacoin

原来使用truffle init,但现在它存在于unbox。执行截图如下:下载样例unboxTruffle 的盒子Boxs装有很多非常实用的项目样板,可以让你忽略一些环境配置问题,从而可以集中与开发你自己的DApp的业务唯一性。除此之外,Truffle Boxes能够容纳其他有用的组件、Solidity合约或者库,前后端视图等等。所有这些都是一个完整的实例Dapp程序。都可以下载下来逐一研究,寻找适合自己公司目前业务模型的组件。Truffle的官方Boxes地址(http://truffleframework.com/boxes/)可以看到,现在官方盒子还不多,总共7个,有三个是关于react的,两个是truffle自己的项目,可以下载体验,剩下两个是我们比较关心的,一个是metacoin,非常好的入门示例,另一个是webpack,顾名思义,它是一套比起metacoin更加完整的模板的存在。既然我们是初学,下面我们就从metacoin入手学习。2.2 目录结构及文件解读进入metacoin目录,当前目录已经被初始化成一个新的空的以太坊工程,目录结构如下:contractsConvertLib.solMetaCoin.solMigrations.solplaceholdermigrations1_initial_migration.js2_deploy_contracts.jstestmetacoin.jsTestMetacoin.solplaceholdertruffle-config.jstruffle.js初始化文件解释1:Migrations.solpragma solidity ^0.4.2;

contract Migrations {

address public owner;

uint public last_completed_migration;

modifier restricted() {

if (msg.sender == owner) _;

}

function Migrations() public {

owner = msg.sender;

}

function setCompleted(uint completed) public restricted {

last_completed_migration = completed;

}

function upgrade(address new_address) public restricted {

Migrations upgraded = Migrations(new_address);

upgraded.setCompleted(last_completed_migration);

}

}上面我们学习了Solidity具体的类型语法,我们来分析一下这个文件:它定义了一个名字为“迁移”的合约有一个任意访问的全局变量,存储于storage的地址类型变量owner有一个可任意访问的全局变量,存储于storage的无符号整型类型的变量last_completed_migrationmodifier下面细说,此处略过msg.sender下面细说,此处略过构造函数,初始化将发送方赋值给owner保存一个setCompleted赋值方法,赋值给last_completed_migration,其中该方法被声明为restricted,下面细说,此处略过upgrade方法,调用当前合约自己的方法,得到合约的实例upgraded,然后通过该是咧调用setCompleted赋值方法。Solidity语法补充说明1:function modifiermodifier的使用方法,就看上面的Migrations合约的例子即可,它可以自动改变函数的行为,例如你可以给他预设一个条件,他会不断检查,一旦符合条件即可走预设分支。它可以影响当前合约以及派生合约。pragma solidity ^0.4.11;

contract owned {

function owned() public { owner = msg.sender; }

address owner;

// 这里仅定义了一个modifier但是没有使用,它将被子类使用,方法体在这里“_;”,这意味着如果owner调用了这个函数,函数会被执行,其他人调用会抛出一个异常。

modifier onlyOwner {

require(msg.sender == owner);

_;

}

}

// 通过is关键字来继承一个合约类,mortal是owned的子类,也叫派生类。

contract mortal is owned {

// 当前合约派生了owned,此方法使用了父类的onlyOwner的modifier

// public onlyOwner, 这种写法挺让人困惑,下面给出了我的思考,暂理解为派生类要使用基类的modifier。

function close() public onlyOwner {

selfdestruct(owner);

}

}

contract priced {

// Modifiers可以接收参数

modifier costs(uint price) {

// 这里modifier方法体是通过条件判断,是否满足,满足则执行“_;”分支。

if (msg.value >= price) {

_;

}

}

}

contract Register is priced, owned {

mapping (address => bool) registeredAddresses;

uint price;

// 构造函数给全局变量price赋值。

function Register(uint initialPrice) public { price = initialPrice; }

// payable关键字重申,如果不声明的话,函数关于以太币交易的操作都会被拒回。

function register() public payable costs(price) {

registeredAddresses[msg.sender] = true; }

// 此派生类也要使用基类的modifier。

function changePrice(uint _price) public onlyOwner {

price = _price;

}

}

contract Mutex {

bool locked;

modifier noReentrancy() {

require(!locked);

locked = true;

_;

locked = false;

}

function f() public noReentrancy returns (uint) {

require(msg.sender.call());

return 7;

}

}又延伸出来一个盲点:require关键字,它是错误判断,提到assert就懂了,官方文档的解释为:require(bool condition):

throws if the condition is not met - to be used for errors in inputs or external components.

总结一下modifier:声明modifier时,特殊符号“_;”的意思有点像TODO,是一个“占位符”,指出了你要写的具体方法体内容的位置。function close() public onlyOwner,派生类某方法想“如虎添翼”加入基类的某个modifier功能,就可以这样写,这行的具体意思就是:close方法也必须是owner本人执行,否则报错!Solidity语法补充说明2:Restricting Access限制访问一种针对合约的常见模式。但其实你永远不可能限制得了任何人或电脑读取你的交易内容或者你的合同状态。你可以使用加密增大困难,但你的合约就是用来读取数据的,那么其他人也会看到。所以,其实上面的modifier onlyOwner是一个特别好的可读性极高的限制访问的手段。那么restricted关键字如何使用呢?好吧,我刚刚带着modifier的知识重新看了上面的Migrations合约的内容发现,restricted并不是关键字,而是modifier的方法名,在其下的想增加该modifier功能的函数中,都使用了public restricted的方式来声明。说到这里,我又明白了为什么要使用public onlyOwner这种写法,因为public是函数可见性修饰符,onlyOwner是自定义的限制访问的modifier方法,他们都是关于函数使用限制方面的,所以会写在一起,可以假想一个括号将它俩括起来,他们占一个位置,就是原来属于public|private|internal|external的那个位置。Solidity语法补充说明3:Special Variables and Functions这一点很重要了,我们研究一下Solidity自身携带的特殊变量以及函数:block.blockhash(uint blockNumber) returns (bytes32): 返回参数区块编号的hash值。(范围仅限于最近256块,还不包含当然块)block.coinbase (address): 当前区块矿工地址block.difficulty (uint): 当前区块难度block.gaslimit (uint): 当前区块的gaslimitblock.number (uint): 当前区块编号block.timestamp (uint): 当前区块的timestamp,使用UNIX时间秒msg.data (bytes): 完整的calldatamsg.gas (uint): 剩余的gasmsg.sender (address): 信息的发送方 (当前调用)msg.sig (bytes4): calldata的前四个字节 (i.e. 函数标识符)msg.value (uint): 消息发送的wei的数量now (uint): 当前区块的timestamp (block.timestamp别名)tx.gasprice (uint): 交易的gas单价tx.origin (address): 交易发送方地址(完全的链调用)msg有两个属性,一个是msg.sender,另一个是msg.value,这两个值可以被任何external函数调用,包含库里面的函数。注意谨慎使用block.timestamp, now and block.blockhash,因为他们都是有可能被篡改的。初始化文件解释2:MetaCoin.solpragma solidity ^0.4.18;

import "./ConvertLib.sol";

// 这是一个简单的仿币合约的例子。它并不是标准的可兼容其他币或token的合约,

// 如果你想创建一个标准兼容的token,请转到 https://github.com/ConsenSys/Tokens(TODO:一会儿我们再过去转)

contract MetaCoin {

mapping (address => uint) balances;// 定义了一个映射类型变量balances,key为address类型,值为无符整型,应该是用来存储每个账户的余额,可以存多个。

event Transfer(address indexed _from, address indexed _to, uint256 _value);// Solidity语法event,TODO:见下方详解。

function MetaCoin() public {// 构造函数,tx.origin查查上面,找到它会返回交易发送方的地址,也就是说合约实例创建时会默认为当前交易发送方的余额塞10000,单位应该是你的仿币。

balances[tx.origin] = 10000;

}

function sendCoin(address receiver, uint amount) public returns(bool sufficient) {// 函数声明部分没有盲点,方法名,参数列表,函数可见性,返回值类型定义。

if (balances[msg.sender] < amount) return false;// 如果余额不足,则返回发送币失败

balances[msg.sender] -= amount;// 否则从发送方余额中减去发送值,注意Solidity也有 “-=”,“+=” 的运算符哦

balances[receiver] += amount;// 然后在接收方的余额中加入发送值数量。

Transfer(msg.sender, receiver, amount);// 使用以上event关键字声明的方法

return true;

}

function getBalanceInEth(address addr) public view returns(uint){// 获取以太币余额

return ConvertLib.convert(getBalance(addr),2);// 调用了其他合约的方法,TODO:稍后介绍ConvertLib合约时说明。

}

function getBalance(address addr) public view returns(uint) {// 获取当前账户的仿币余额

return balances[addr];

}

}

Solidity语法补充说明4:EventsEvents allow the convenient usage of the EVM logging facilities, which in turn can be used to “call” JavaScript callbacks in the user interface of a dapp, which listen for these events.Events提供了日志支持,进而可用于在用户界面上“调用”dapp JavaScript回调,监听了这些事件。简单来说,我们的DApp是基于web服务器上的web3.js与EVM以太坊结点进行交互的,而智能合约是部署在EVM以太坊结点上的。举一个例子:contract ExampleContract {

// some state variables ...

function foo(int256 _value) returns (int256) {

// manipulate state ...

return _value;

}

}合约ExampleContract有个方法foo被部署在EVM的一个结点上运行了,此时用户如果想在DApp上调用合约内部的这个foo方法,如何操作呢,有两种办法:var returnValue = exampleContract.foo.call(2);// 通过web3 的message的call来调用。合约内部再声明一个event ReturnValue(address indexed _from, int256 _value);并在foo方法内使用该event用来返回方法执行结果。第一种办法在方法本身比较耗时的情况下会阻塞,或者不会获取到准确的返回值。所以采用第二种办法:就是通过Solidity的关键字event。event在这里就是一个回调函数的概念,当函数运行结束以后(交易进块),会通过event返回给web3,也就是DApp用户界面相应的结果。这是以太坊一种客户端异步调用方法。关于这个回调,要在DApp使用web3时显示编写:exampleEvent.watch(function(err, result) {

if (err) {

console.log(err)

return;

}

console.log(result.args._value)

// 检查合约方法是否反返回结果,若有则将结果显示在用户界面并且调用exampleEvent.stopWatching()方法停止异步回调监听。

})写Solidity最大的不同在于,我们要随时计算好我们的gas消耗,方法的复杂度,变量类型的存储位置(memory,storage等等)都会决定gas的消耗量。使用event可以获得比storage更便宜的gas消耗。总结一下event,就是如果你的Dapp客户端web3.js想调用智能合约内部的函数,则使用event作为桥梁,它能方便执行异步调用同时又节约gas消耗。初始化文件解释3:ConvertLib.solpragma solidity ^0.4.4;

library ConvertLib{

function convert(uint amount,uint conversionRate) public pure returns (uint convertedAmount)

{

return amount * conversionRate;

}

}与MetaCoin智能合约不同的是,ConvertLib是由library声明的一个库,它只有一个方法,就是返回给定的两个无符整数值相乘的结果。返回到上面的MetaCoin中该库的使用位置去分析,即可知道,MetaCoin的仿币的价格是以太币的一倍,所以MetaCoin是以以太币为标杆,通过智能合约发布的一个token,仿币。这似乎就可以很好地解决我在《以太坊RPC机制与API实例》文章中需要发布三倍以太币的token的需求了,而我们完全不必更改以太坊源码,但那篇文章通过这个需求的路线研究了以太坊的Go源码也算功不可没。初始化文件解释4:1_initial_migration.jsvar Migrations = artifacts.require("./Migrations.sol");

module.exports = function(deployer) {

deployer.deploy(Migrations);

} ;

这个js文件是nodejs的写法,看上去它的作用就是部署了上面的Migrations智能合约文件。初始化文件解释5:2_deploy_contracts.jsvar ConvertLib = artifacts.require("./ConvertLib.sol");

var MetaCoin = artifacts.require("./MetaCoin.sol");

module.exports = function(deployer) {

deployer.deploy(ConvertLib);

deployer.link(ConvertLib, MetaCoin);

deployer.deploy(MetaCoin);

};这个文件是meatcoin智能合约的部署文件,里面约定了部署顺序,依赖关系。这里我们看到了MetaCoin智能合约是要依赖于库ConvertLib的,所以要先部署ConvertLib,然后link他们,再部署MetaCoin,这部分js的写法可以参照官方文档DEPLOYER API,主要就是介绍了一下deploy、link以及then三个方法的详细用法,不难这里不再赘述。初始化文件解释6:truffle-config.js, truffle.jsmodule.exports = {

// See

// to customize your Truffle configuration!};

module.exports = {

// See

// to customize your Truffle configuration!

};这两个文件也都是nodejs,他们都是配置文件,可能作用域不同,目前它俩是完全相同的(因为啥也没有)。我们去它推荐的网站看一看。给出了一个例子:module.exports = {

networks: {

development: {

host: "127.0.0.1",

port: 8545,

network_id: "*" // Match any network id

}

}

};这个例子展示了该配置文件可以配置网络环境,暂先到这,以后遇上了针对该配置文件进行研究。初始化文件解释7:.placeholderThis is a placeholder file to ensure the parent directory in the git repository. Feel free to remove.翻译过来就是:placeholder文件是用来保证在git库中父级目录的,可以删除。初始化文件解释8:metacoin.js和下面的文件一样,他们的功能都是用来做单元测试的,truffle在编译期间会自动执行这些测试脚本。当前文件为js版本,模拟用户在DApp客户端用户界面操作的情形。var MetaCoin = artifacts.require("./MetaCoin.sol"); // 这与1_initial_migration.js文件的头是一样的,引入了一个智能合约文件。contract('MetaCoin', function(accounts) {

it("should put 10000 MetaCoin in the first account", function() {

return MetaCoin.deployed().then(function(instance) {

return instance.getBalance.call(accounts[0]);

}).then(function(balance) {

assert.equal(balance.valueOf(), 10000, "10000 wasn't in the first account");

});

});

it("should call a function that depends on a linked library", function() {

var meta;

var metaCoinBalance;

var metaCoinEthBalance;

return MetaCoin.deployed().then(function(instance) {

meta = instance;

return meta.getBalance.call(accounts[0]);

}).then(function(outCoinBalance) {

metaCoinBalance = outCoinBalance.toNumber();

return meta.getBalanceInEth.call(accounts[0]);

}).then(function(outCoinBalanceEth) {

metaCoinEthBalance = outCoinBalanceEth.toNumber(); }).then(function() {

assert.equal(metaCoinEthBalance, 2 * metaCoinBalance, "Library function returned unexpected function, linkage may be broken");

});

});

it("should send coin correctly", function() {

var meta;

// Get initial balances of first and second account.

var account_one = accounts[0];

var account_two = accounts[1];

var account_one_starting_balance;

var account_two_starting_balance;

var account_one_ending_balance;

var account_two_ending_balance;

var amount = 10;

return MetaCoin.deployed().then(function(instance) {

meta = instance;

return meta.getBalance.call(account_one);

}).then(function(balance) {

account_one_starting_balance = balance.toNumber();

return meta.getBalance.call(account_two);

}).then(function(balance) {

account_two_starting_balance = balance.toNumber();

return meta.sendCoin(account_two, amount, {from: account_one});

}).then(function() {

return meta.getBalance.call(account_one);

}).then(function(balance) {

account_one_ending_balance = balance.toNumber();

return meta.getBalance.call(account_two);

}).then(function(balance) {

account_two_ending_balance = balance.toNumber();

assert.equal(account_one_ending_balance,

account_one_starting_balance - amount, "Amount wasn't correctly taken from the sender");

assert.equal(account_two_ending_balance, account_two_starting_balance + amount, "Amount wasn't correctly sent to the receiver");

});

});

});我们来分析一波这个truffle metacoin js版本的单元测试:直接函数contract走起,第一个参数为智能合约名字,第二个参数为匿名内部函数匿名函数传入了当前账户地址,函数体是单元测试集每个单元测试是由关键字it函数来做,第一个参数传入单元测试的comments,第二个参数传入一个无参匿名函数进到无参匿名函数的函数体内,就是正式的单元测试内容,可以定义自己的成员属性,通过调用truffle内部组件自动部署合约逐一测试,使用成员属性接收返回值,最后使用关键字assert来判断是否符合预期。具体业务不详细展开,可根据自己业务内容随意更改。这是官方文档,详细说明如何使用JS来编写智能合约的单元测试。http://truffleframework.com/docs/getting_started/javascript-tests初始化文件解释9:TestMetacoin.sol好下面来看看Solidity智能合约版本的单元测试。一般来讲,这种文件的命名规则是Test加待测智能合约的名字拼串组成。pragma solidity ^0.4.2;

import "truffle/Assert.sol";

import "truffle/DeployedAddresses.sol";

import "../contracts/MetaCoin.sol";

contract TestMetacoin {

function testInitialBalanceUsingDeployedContract() public {

MetaCoin meta = MetaCoin(DeployedAddresses.MetaCoin());

uint expected = 10000;

Assert.equal(meta.getBalance(tx.origin), expected, "Owner should have 10000 MetaCoin initially");

}

function testInitialBalanceWithNewMetaCoin() public {

MetaCoin meta = new MetaCoin();

uint expected = 10000;

Assert.equal(meta.getBalance(tx.origin), expected, "Owner should have 10000 MetaCoin initially");

}

}继续分析:首先import了truffle的几个类库,用来支持我们接下来的测试内容。然后import了待测智能合约。建立单元测试智能合约,根据合约不同方法定义对应的test测试方法。方法体内部去调用待测智能合约的方法,传参接收返回值,然后使用关键字assert判断是否符合预期。这是官方文档,详细说明如何使用Solidity来编写智能合约的单元测试。(http://truffleframework.com/docs/getting_started/solidity-tests)2.3 编译合约键入truffle compile输出情况:输出结果根据编译输出的路径地址./build/contracts,我们去查看一下产生文件列表可以看到原来所在在contracts目录下的智能合约文件(有合约contract,有库library)均被编译成了json文件。这些json文件就是truffle用来部署合约的编译文件。2.4 配置以太坊本地环境truffle.js是truffle的配置文件,启动好以太坊本地结点以后,我们需要让truffle去识别它并使用它,这就需要在truffle.js中配置相关属性:module.exports = {

networks: {

development: {

host: "127.0.0.1",

port: 8545,

network_id: "*" // Match any network id

}

}

};【说明】如果不启动TestRPC,直接执行部署合约的话,会有以下错误提示:无网络2.5 启动本地以太坊客户端结点启动适合开发的RPC客户端启动之前安装好的EthereumJS RPC客户端。testrpc【说明】一定要启动一个新的客户端执行testrpc命令,可以观察到默认账户和私钥信息。本地客户端2.6 部署合约移植(migrate),对这里叫移植,但下面我们仍使用“部署”这个词,truffle中部署的命令为:truffle migrate输出结果截图如下:部署钱包的输出结果查看testrpc的输出窗口,可以看到这笔交易和花费的区块:2.7 测试合约我们知道在执行编译时会自动执行这些单元测试,如果有一个测试未通过则会中断编译过程。而在开发阶段,我们也可以自己使用命令来测试。truffle test没有报错就说明通过了,绿条“5 passing(2s)”,有报错就会打印在下方。输出截图1输出截图23用Truffle框架运行一个“Hello World!”智能合约3.1 创建工程目录返回父级目录,创建一个文件夹HelloWorld,来做为你的工程根目录。mkdir HelloWorld输入结果:创建并进入该目录3.2 初始化框架在工作目录HelloWorld目录下,执行truffle初始化动作:truffle init输出截图:初始化成功采用SFTP下载文件到本地,可查看目录结构:│ truffle-config.js

│ truffle.js

├─contracts

│ Migrations.sol

├─migrations

│ 1_initial_migration.js

└─test

目录结构简单说明如下:contract/ - Truffle默认的合约文件存放地址。migrations/ - 存放发布脚本文件test/ - 用来测试应用和合约的测试文件truffle.js - Truffle的配置文件3.3 新建新合约在./contract目录下创建一个自己的合约文件Greeter.sol。pragma solidity ^0.4.17;

contract Greeter

{

address creator;

string greeting;

function Greeter(string _greeting) public

{

creator = msg.sender;

greeting = _greeting;

}

function greet() public constant returns (string)

{

return greeting;

}

function setGreeting(string _newgreeting) public

{

greeting = _newgreeting;

}

/**********

Standard kill() function to recover funds

**********/

function kill()public

{

if (msg.sender == creator)

suicide(creator); // kills this contract and sends remaining funds back to creator

}

}

3.4 新建发布脚本在./migrations/目录下新建一个文件:2_deploy_contracts.js,增加发布代码。var Greeter = artifacts.require("./Greeter.sol");

module.exports = function(deployer) {

deployer.deploy(Greeter,"Hello, World!");//"参数在第二个变量携带"

};3.5 编译进入到工程根目录./HelloWorld目录下,进行编译:truffle compile输出截图如下:编译成功截图3.6 启动你的客户端如果之前没有启动RPC客户端的话,则需要启动之前安装好的EthereumJS RPC客户端。如果已启动的则忽略此步。$ testrpc3.7 部署合约(migrate)执行部署命令(truffle migrate)提示出错。truffle migrate错误截图输出:部署失败,提示网络未配置修改文件./HelloWorld/truffle.js文件,增加网络配置:module.exports = {

// See

// to customize your Truffle configuration!

networks: {

development: {

host: "localhost",

port: 8545,

network_id: "*" // 匹配任何network id

}

}

};

重新执行编译命令,重新执行部署命令(truffle migrate),则运行正确。对应Greeter的钱包地址为“0x7d62724f397a99613b84923a1166d683de2db680”部署成功3.8 TRUFFLE测试环境运行合约Truffle提供了一种更加简单的方式,通过交互式控制台来与你的那些准备好的合约进行交互。truffle console一个基本的交互控制台,可以连接任何EVM客户端。如果你已经有了自己的ganache或者geth等EVM的本地环境,那么就可以使用truffle console来交互,所以如果你已经有一个现成的小组共享的开发用EVM,那么使用这个没错。truffle develop一个交互控制台,启动时会自动生成一个开发用区块链环境(其实我认为它与ganache就是一个底层实现机制,都是默认生成10个账户)。如果你没有自己的EVM环境的话,直接使用truffle develop非常方便。truffle console输入Greeter智能合约命令,显示打印出一个json结构,展示了它的各种属性内容。查看Greeter结构根据你的Greeter钱包地址,运行Greeter智能合约命令:hello,world智能合约运行成功3.8 GETH正式环境运行合约启动GETH环境本节假设GETH环境已安装好了。如果还没有安装的同学,可参考文章《第一课 如何在WINDOWS环境下搭建以太坊开发环境》(https://www.jianshu.com/p/683ea7d62a39)的描述步骤。然后在IDE内部打开一个terminal,启动GETH的EVM环境。geth --datadir testNet3 --dev --rpc console截图1截图2GETH 中是通过abi来注册合约对象的。首先我们找到./build/contracts/Greeter.json中的abi的value:"abi": [

{

"inputs": [

{

"name": "_greeting",

"type": "string"

}

],

"payable": false,

"stateMutability": "nonpayable",

"type": "constructor"

},

{

"constant": true,

"inputs": [],

"name": "greet",

"outputs": [

{

"name": "",

"type": "string"

}

],

"payable": false,

"stateMutability": "view",

"type": "function"

},

{

"constant": false,

"inputs": [

{

"name": "_newgreeting",

"type": "string"

}

],

"name": "setGreeting",

"outputs": [],

"payable": false,

"stateMutability": "nonpayable",

"type": "function"

},

{

"constant": false,

"inputs": [],

"name": "kill",

"outputs": [],

"payable": false,

"stateMutability": "nonpayable",

"type": "function"

}

],

通过json压缩成一行得到:var abi = [{"inputs": [{"name": "_greeting","type": "string"}],"payable": false,"stateMutability": "nonpayable","type": "constructor"},{"constant": true,"inputs": [],"name": "greet","outputs": [{"name": "","type": "string"}],"payable": false,"stateMutability": "view","type": "function"},{"constant": false,"inputs": [{"name": "_newgreeting","type": "string"}],"name": "setGreeting","outputs": [],"payable": false,"stateMutability": "nonpayable","type": "function"},{"constant": false,"inputs": [],"name": "kill","outputs": [],"payable": false,"stateMutability": "nonpayable","type": "function"}];重新部署智能合约到Geth环境启动一个新的命令窗口,到cd /usr/work/HelloWorldtruffle migrate成功部署输出截图:智能合约部署成功获得Greeter的地址为 0xb52bb3ce336f71a14345c78e5b2f8e63685e3f92切换到GETH环境下,利用api和钱包地址(你自己Greeter智能合约的钱包地址哦)注册合约对象。var abi = [{"inputs": [{"name": "_greeting","type": "string"}],"payable": false,"stateMutability": "nonpayable","type": "constructor"},{"constant": true,"inputs": [],"name": "greet","outputs": [{"name": "","type": "string"}],"payable": false,"stateMutability": "view","type": "function"},{"constant": false,"inputs": [{"name": "_newgreeting","type": "string"}],"name": "setGreeting","outputs": [],"payable": false,"stateMutability": "nonpayable","type": "function"},{"constant": false,"inputs": [],"name": "kill","outputs": [],"payable": false,"stateMutability": "nonpayable","type": "function"}];var HelloWorld = eth.contract(abi).at('0xb52bb3ce336f71a14345c78e5b2f8e63685e3f92')HelloWorld.greet()输出截图显示成功:4总结及参考本文站在巨人的肩膀上,完成了以太坊开发框架Truffle从入门到实战的演示。对巨人的文章表示感谢:1,Solidity的Truffle框架实战(手把手)(http://truffle.tryblockchain.org/Solidity-truffle-%E5%AE%9E%E6%88%98.html)2, 【精解】开发一个智能合约(http://www.cnblogs.com/Evsward/p/contract.html)3,官网参考:http://truffleframework.com/docs/如需获取源码,请私信作者获取。(点击:“阅读原文”即可查看作者原文)本文来源:简书作者:笔名辉哥以下是我们的社区介绍,欢迎各种合作、交流、学习:)阅读原文编辑于 2018-06-25 11:16科技区块链(Blockchain)​赞同 23​​2 条评论​分享​喜欢​收藏​申请转载​文章被以下专栏收录HiBlock区块链社区HiBlock区块

TRUFFLE中文(简体)翻译:剑桥词典

TRUFFLE中文(简体)翻译:剑桥词典

词典

翻译

语法

同义词词典

+Plus

剑桥词典+Plus

Shop

剑桥词典+Plus

我的主页

+Plus 帮助

退出

剑桥词典+Plus

我的主页

+Plus 帮助

退出

登录

/

注册

中文 (简体)

查找

查找

英语-中文(简体)

truffle 在英语-中文(简体)词典中的翻译

trufflenoun [ C ] uk

Your browser doesn't support HTML5 audio

/ˈtrʌf.əl/ us

Your browser doesn't support HTML5 audio

/ˈtrʌf.əl/

truffle noun [C]

(RARE FOOD)

Add to word list

Add to word list

a type of fungus that grows underground and can be eaten. Truffles are expensive because they are very rare.

块菌,松露(食用菌,生于地下,因稀有而昂贵)

The Dordogne region's gastronomic specialities include truffles and foie gras.

多尔多涅地区的美食特产包括块菌和肥鹅肝。

Use truffle oil to add flavour to the dish.

给菜里加点松露油增加一点滋味。

truffle noun [C]

(CHOCOLATE)

a small, round, very soft chocolate

巧克力软糖

rum truffles

朗姆酒巧克力

(truffle在剑桥英语-中文(简体)词典的翻译 © Cambridge University Press)

truffle的例句

truffle

In these areas, the search for black truffles and their cultivation is a tradition going back more than 200 years.

来自 Wikipedia

该例句来自维基百科,在CC BY-SA许可下可重复使用。

The aromas of the wine include red fruits, berries and spices, as well as truffles for older wines.

来自 Wikipedia

该例句来自维基百科,在CC BY-SA许可下可重复使用。

Likes truffle and elegance, and deeply hates vulgarity.

来自 Wikipedia

该例句来自维基百科,在CC BY-SA许可下可重复使用。

As with the true truffles, some of them have distinctive smells and are actively hunted out by small mammals which may consume them and spread their spores.

来自 Wikipedia

该例句来自维基百科,在CC BY-SA许可下可重复使用。

Rodents and insectivores, whose food stashes were destroyed in the fire, eat truffles, which survived underground, and leave feces containing nitrogen-fixing bacteria in the soil.

来自 Wikipedia

该例句来自维基百科,在CC BY-SA许可下可重复使用。

The top layer is soft raspberry jelly, the middle layer is truffle, and the bottom one is marzipan.

来自 Wikipedia

该例句来自维基百科,在CC BY-SA许可下可重复使用。

The filling can also be similar to a truffle or a cherry cordial, with bourbon added.

来自 Wikipedia

该例句来自维基百科,在CC BY-SA许可下可重复使用。

Options include a tiger prawn and watercress salad, and roast beef with truffle with a green bean salad.

来自 Wikipedia

该例句来自维基百科,在CC BY-SA许可下可重复使用。

示例中的观点不代表剑桥词典编辑、剑桥大学出版社和其许可证颁发者的观点。

B1

truffle的翻译

中文(繁体)

稀有食品, 塊菌(食用菌,生於地下,因稀有而昂貴), 巧克力…

查看更多内容

西班牙语

trufa, Trufa…

查看更多内容

葡萄牙语

trufa…

查看更多内容

更多语言

土耳其语

法语

in Dutch

捷克语

丹麦语

印尼语

泰语

越南语

波兰语

in Swedish

马来语

德语

挪威语

in Ukrainian

俄语

çikolatalı yumuşak tatlı, bir tür mantar, bir mantar tipi…

查看更多内容

truffe…

查看更多内容

truffel…

查看更多内容

lanýž (houba), lanýž (bonbon)…

查看更多内容

trøffel, chokoladetrøffel…

查看更多内容

jenis jamur, permen cokelat beralkohol…

查看更多内容

เห็ดทรัฟเฟิล, ช็อคโกแลตทรัฟเฟิล…

查看更多内容

nấm cục, sôcôla truffle…

查看更多内容

trufla, trufel…

查看更多内容

tryffel…

查看更多内容

trufel…

查看更多内容

der Trüffel…

查看更多内容

trøffel, trøffelsjokolade…

查看更多内容

трюфель…

查看更多内容

трюфель (конфета), трюфель (гриб)…

查看更多内容

需要一个翻译器吗?

获得快速、免费的翻译!

翻译器工具

truffle的发音是什么?

在英语词典中查看 truffle 的释义

浏览

true to life

true-blue

true-life

true-life story

truffle

trug

truism

truly

trump

“每日一词”

veggie burger

UK

Your browser doesn't support HTML5 audio

/ˈvedʒ.i ˌbɜː.ɡər/

US

Your browser doesn't support HTML5 audio

/ˈvedʒ.i ˌbɝː.ɡɚ/

a type of food similar to a hamburger but made without meat, by pressing together small pieces of vegetables, seeds, etc. into a flat, round shape

关于这个

博客

Forget doing it or forget to do it? Avoiding common mistakes with verb patterns (2)

March 06, 2024

查看更多

新词

stochastic parrot

March 04, 2024

查看更多

已添加至 list

回到页面顶端

内容

英语-中文(简体)例句翻译

©剑桥大学出版社与评估2024

学习

学习

学习

新词

帮助

纸质书出版

Word of the Year 2021

Word of the Year 2022

Word of the Year 2023

开发

开发

开发

词典API

双击查看

搜索Widgets

执照数据

关于

关于

关于

无障碍阅读

剑桥英语教学

剑桥大学出版社与评估

授权管理

Cookies与隐私保护

语料库

使用条款

京ICP备14002226号-2

©剑桥大学出版社与评估2024

剑桥词典+Plus

我的主页

+Plus 帮助

退出

词典

定义

清晰解释自然的书面和口头英语

英语

学习词典

基础英式英语

基础美式英语

翻译

点击箭头改变翻译方向。

双语词典

英语-中文(简体)

Chinese (Simplified)–English

英语-中文(繁体)

Chinese (Traditional)–English

英语-荷兰语

荷兰语-英语

英语-法语

法语-英语

英语-德语

德语-英语

英语-印尼语

印尼语-英语

英语-意大利语

意大利语-英语

英语-日语

日语-英语

英语-挪威语

挪威语-英语

英语-波兰语

波兰语-英语

英语-葡萄牙语

葡萄牙语-英语

英语-西班牙语

西班牙语-英语

English–Swedish

Swedish–English

半双语词典

英语-阿拉伯语

英语-孟加拉语

英语-加泰罗尼亚语

英语-捷克语

英语-丹麦语

English–Gujarati

英语-印地语

英语-韩语

英语-马来语

英语-马拉地语

英语-俄语

English–Tamil

English–Telugu

英语-泰语

英语-土耳其语

英语-乌克兰语

English–Urdu

英语-越南语

翻译

语法

同义词词典

Pronunciation

剑桥词典+Plus

Shop

剑桥词典+Plus

我的主页

+Plus 帮助

退出

登录 /

注册

中文 (简体)  

Change

English (UK)

English (US)

Español

Русский

Português

Deutsch

Français

Italiano

中文 (简体)

正體中文 (繁體)

Polski

한국어

Türkçe

日本語

Tiếng Việt

हिंदी

தமிழ்

తెలుగు

关注我们

选择一本词典

最近的词和建议

定义

清晰解释自然的书面和口头英语

英语

学习词典

基础英式英语

基础美式英语

语法与同义词词典

对自然书面和口头英语用法的解释

英语语法

同义词词典

Pronunciation

British and American pronunciations with audio

English Pronunciation

翻译

点击箭头改变翻译方向。

双语词典

英语-中文(简体)

Chinese (Simplified)–English

英语-中文(繁体)

Chinese (Traditional)–English

英语-荷兰语

荷兰语-英语

英语-法语

法语-英语

英语-德语

德语-英语

英语-印尼语

印尼语-英语

英语-意大利语

意大利语-英语

英语-日语

日语-英语

英语-挪威语

挪威语-英语

英语-波兰语

波兰语-英语

英语-葡萄牙语

葡萄牙语-英语

英语-西班牙语

西班牙语-英语

English–Swedish

Swedish–English

半双语词典

英语-阿拉伯语

英语-孟加拉语

英语-加泰罗尼亚语

英语-捷克语

英语-丹麦语

English–Gujarati

英语-印地语

英语-韩语

英语-马来语

英语-马拉地语

英语-俄语

English–Tamil

English–Telugu

英语-泰语

英语-土耳其语

英语-乌克兰语

English–Urdu

英语-越南语

词典+Plus

词汇表

选择语言

中文 (简体)  

English (UK)

English (US)

Español

Русский

Português

Deutsch

Français

Italiano

正體中文 (繁體)

Polski

한국어

Türkçe

日本語

Tiếng Việt

हिंदी

தமிழ்

తెలుగు

内容

英语-中文(简体) 

 

Noun 

truffle (RARE FOOD)

truffle (CHOCOLATE)

例句

Translations

语法

所有翻译

我的词汇表

把truffle添加到下面的一个词汇表中,或者创建一个新词汇表。

更多词汇表

前往词汇表

对该例句有想法吗?

例句中的单词与输入词条不匹配。

该例句含有令人反感的内容。

取消

提交

例句中的单词与输入词条不匹配。

该例句含有令人反感的内容。

取消

提交

松露_百度百科

度百科 网页新闻贴吧知道网盘图片视频地图文库资讯采购百科百度首页登录注册进入词条全站搜索帮助首页秒懂百科特色百科知识专题加入百科百科团队权威合作下载百科APP个人中心松露播报讨论上传视频一种蕈类的总称收藏查看我的收藏0有用+10松露(学名:Truffle)是一种蕈类的总称,分类为子囊菌门西洋松露科西洋松露属(学名:Tuber)。大约有10种不同的品种,通常是一年生的真菌,多数在阔叶树的根部着丝生长,一般生长在松树、栎树、橡树下。散布于树底方圆120~150厘米,块状主体藏于地下3~40厘米。分布在意大利、法国、西班牙、中国、新西兰等国。松露食用气味特殊,含有丰富的蛋白质、氨基酸等营养物质。松露对生长环境的要求极其苛刻,且无法人工培育,产量稀少,导致了它的珍稀昂贵。因此欧洲人将松露与鱼子酱、鹅肝并列“世界三大珍肴”。在众多种类中,法国产的黑松露(Tuber melanosporum Vitt.)与意大利产的白松露(Tuber magnatum Pico)评价最高。白松露一般生食,磨碎后撒在意大利面或煎蛋上。可以切成薄片加在肉里一同烤制,或用来烤鹅肝。有些奶酪中也添加了松露。黑松露的味道没有白松露那么浓烈,可以做松露盐或松露蜂蜜。过去松露要去皮,现在多采用研磨避免浪费。2016年4月,澳大利亚发现世界最大松露,重达1.5公斤。中文名松露外文名Truffle别    名地菌、块菌、块菰,猪拱菌界真菌界门子囊菌门亚    门盘菌亚门纲盘菌纲亚    纲盘菌亚纲目盘菌目科西洋松露科族菌类属西洋松露属种松露亚    种块茎分布区域意大利、法国、西班牙等国荣    誉被欧洲人称为“餐桌上的钻石”俄文名трю́фель目录1形态特征2生长习性3地理分布▪意大利▪法国▪中国4品种分类▪意大利白松露▪黑冬松露▪黑夏松露▪俄勒冈白松露5采集方法6食用价值7食用方法8历史渊源▪公元前3000年▪中世纪时期▪17世纪前▪17-20世纪9中国渊源10相关新闻11食物营养成分形态特征播报编辑松露图册一(10张)松露子实体如块状,小者如核桃,大者如拳头。幼时内部白色,质地均匀,成熟后变成深黑色,具有色泽较浅的大理石状纹理。子囊果球形、椭圆形,棕色或褐色,有的小如豆,也有大如富士苹果,表面具有多角形疣状物,反射出红色的光泽,顶端有凹陷;其肉(产孢子组织)初为白色,后呈棕色或灰色,成熟时会变为黑色;切面呈褐色,具有大理石样纹,散发出森林般潮湿气味,并带有干果香气,借以引诱小动物前来觅物,将孢子带到他处进行繁殖。松露外形奇特可以小如花生,也可能大如手球。松露生长周期只有一年。它的大小和年龄完全无关。只伴随着四季变化而成长,死亡与诞生。一般的,黑松露大约12月就进入成熟期直到隔年3月。过熟的松露就会腐烂解体。生长习性播报编辑松露松露生长在土里,是一种附着于松树根下的茎块菌类,含大量水分和钾﹑钙﹑镁﹑铁﹑氟等微量矿物元素。它不像一般的菌菇柔软多汁,反而质地较坚硬。松露偏好碱性土质,高品质的松露主要出产于石灰质地形区内,如意大利的阿尔巴、法国的佩里哥、中国的云南永仁县等,全都位在石灰质地形区内。松露的养分来自附着的树根和土壤,一个地方如果生长过松露,土地和植物的养分会被松露吸收殆尽,在一段时间内无法生长出其他东西。松露在成长过程中也受不了任何细微的环境变动,它对环境的挑剔着实令人咋舌。它是世界上为数不多不能进行有序人工种植的美味之一,必须借助和树根之间的共生关系获取养分。只要周边生存的环境发生了细微的变化,松露孢子将无法生长。但21世纪初西方国家已实现了半人工生长。松露特别喜欢在松树、橡树、白杨树、柳树、榛树和椴树下生长,颜色和气味因树种而不同。如今机械化农耕方式、土壤受到农药喷洒、雨量过剩或过少、森林树种变化等,也是松露在二十世纪大量减产的主因。地理分布播报编辑意大利松露图片(5张)白松露,只在意大利和巴尔干半岛的克罗地亚发现过白松露。色泽为轻微的金色,浅褐色(米色)或者是淡棕色,并且带有棕褐色或者乳白色的斑块或者细小的纹理。大小不等,小的有高尔夫球那么大,大的就好似苹果了。在好的年份,白松露的世界产量也只有3吨,相对于年产量约35吨的黑松露,可想而知其珍贵程度。 [1]皮埃蒙特 意大利西北部的皮埃蒙特大区(Piemonte)位于波河上游谷地,西、北为阿尔卑斯山脉环绕,南是利古里亚亚平宁山脉。这一区域的古内奥省(cuneo)阿尔巴(Alba:皮埃蒙特中南部,包括朗格Langhe丘陵和罗艾洛Roero地区)出产白松露。法国普罗旺斯黑松露普罗旺斯是全球最重要的黑松露产地,产量占法国的90%。最主要的生产中心集中在北部的Tricastin,每年有上30吨左右的产量。萨尔拉始建于公元9世纪,距今有1000多年的历史。被誉为“美食的天堂”。盛产黑松露、鹅肝,法国著名的鹅肝酱制造商几乎都集中在此处。萨尔拉菜肴在法国西南菜系中确有一席之地。黑松露,主要出产于法国南部。色泽介于深棕色与黑色之间。黑松露外表崎岖不平,呈小凸起状。中国中国也有产松露,外形和法国黑松露非常相像。外皮的鳞片比较小。内部的白色条纹比较细密。主要长在松树的须根。这也是“松露”中文名的由来。主要产地在云南永仁、四川攀枝花一带。成熟的中国黑松露带有复杂的菌菇味道,是一种让人无法理解的嗅觉味道。根据最新的报道,我国台湾省高海拔的山区也有少量松露成长,外形与法国/大陆的非常相近,属于近亲种源。但亚洲人普遍对这一美食没有太多的接触与了解,所以没有进行商业化运作。20世纪末,中国科学家在喜玛拉雅山脉的东南地区发现了黑松露的分布。实际上,在中国西南的藏族、四川攀枝花、云南永仁县的彝族等少数民族地区,松露被当地人们称作“无娘果”。中国松露主要出产 [2]在金沙江流域,现已发现黑松露、白松露等多个松露品种,是金沙江特产之一。以云南永仁县、四川攀枝花为中心方圆200公里范围内是中国松露主要产区。品种分类播报编辑意大利白松露常用名:意大利白松露或艾尔巴松露学名:Tubermagnatum原产地:意大利,克罗地亚生长季节:每年10月到12月味道:与众不同。略微带蒜味,有些类似奶酪,带一些刺鼻的味道。食法:通常生食,切成薄片后与鸡蛋,意大利通心粉,宽面条或沙拉同食。黑冬松露常用名:黑冬松露或佩里戈尔松露Tubermelanosporum学名:Tubermelanosporum原产地:主要为法国,也出产于西班牙与意大利、中国云南永仁县。生长季节:每年12月到次年3月味道:蕴含泥土的芳香,丰润。食法:通常加热食用,用来给鸡蛋或者米饭调味,用于烤鸡的皮下或奶油调料中。黑夏松露常用名:黑夏松露学名:Tuberaestivum原产地:法国、意大利、西班牙、中国云南永仁生长季节:5月到9月味道:比黑冬松露的味道要淡,更接近于平常的蘑。食法:生吃或稍微加热以达到最好的效果。大块的食用,与意大利通心粉、肉类或者调味酱同用。俄勒冈白松露Tuber gibbosum常用名:俄勒冈白松露学名:Tubergibbosum原产地:美国西北部生长季节:每年10月到11月味道:与欧洲的松露不同,味道更淡,更脆更多。食法:生吃。或者调于黄油、橄榄油、调味酱或者高汤中。采集方法播报编辑黑松露黑松露的成熟期通常在每年的11月到次年的三月,通常最好的季节是在12月到次年的3月之间。采集松露的人叫做“松露猎人”,每个松露猎人身上都有一本家传的藏宝图,记录着父辈们曾经找到松露的地点、时间和大小。寻找松露的过程十分有趣,各国猎人使用的方法也不尽相同。在法国,人们习惯把母猪当作收获黑松露的得力助手。母猪的嗅觉极其灵敏,在6米远的地方就能闻到埋在25厘米至30厘米深的地下的松露。这是因为松露的气味与诱发母猪性冲动的雄甾烯醇类似, [3]所以母猪对其情有独钟。但是母猪有贪吃松露的毛病,如果猎人没有及时拦住,母猪找到松露时会疯狂地将它拱出来吃掉。在意大利,人们更喜欢用经过训练的雌性猎犬来寻找白松露。通常,猎犬会用它的爪子在松露所在的位置上做个记号,等主人来后用小耙子小心翼翼地从土壤中将珍贵的松露挖出来。训练一只会寻找松露的猎犬要经过复杂的过程,首先是训练狗把丢出去的球叼回来,然后用奶酪代替球,继而把奶酪藏起来让狗去把它找出来,最后再用小块松露代替奶酪,让狗找到并挖出来。这样一条经过训练的猎犬,在市场上可以卖到3000欧元。在寻找松露的前一夜,猎人通常不给猎犬吃东西,这样猎犬为了换取食物作为奖励,会更加努力地去寻找松露。食用价值播报编辑科学研究数据显示黑松露含有丰富的蛋白质、18种氨基酸(包括人体不能合成的8种必需氨基酸)、不饱和脂肪酸、多种维生素、锌、锰、铁、钙、磷、硒等必需微量元素,以及鞘脂类、脑苷脂、神经酰胺、三萜、雄性酮、腺苷、松露酸、甾醇、松露多糖、松露多肽等大量的代谢产物,具有极高的营养保健价值。其中雄性酮有助阳、调理内分泌的显著功效;鞘脂类化合物在防止老年痴呆、动脉粥样硬化以及抗肿瘤细胞毒性方面有明显活性;多糖、多肽、三萜具有增强免疫力、抗衰老、抗疲劳等作用,可用于保健养身。食用方法播报编辑块菌炖鸡一、 原料:块菌干品50克、母鸡一只(约1500克)、葱、姜片、精盐、味精、胡椒粉二、 作法:1、 将块菌干品用温水浸泡发胀、洗净。2、 将宰杀洗净后的鸡放入锅内,加入水约3斤,放入葱(打结)、姜片武火烧至沸腾,加入块菌,盖严锅口,烧沸后移文火烧约3小时,加入精盐、味精即可。历史渊源播报编辑公元前3000年松露最早出在新苏美尔的铭文,铭文上记载了亚摩利人的饮食习惯,说他们常常吃松露。几个世纪后,泰奥弗拉斯在他的笔札上又提及松露。公元前3000年,巴比伦人已经在海滩和沙漠寻找松露。古希腊故事提及阿佛洛狄忒(爱情女神)特别爱吃这个蘑菇(菲罗玄的莱夫卡斯率先在笔札中谈及松露具有春药的效力)。一个传说认为松露是被宙斯的雷引发的。在古代,意大利有两种松露:Tuber Melanosporum(冬季黑松露,黑孢块菌)与Tuber Magnatum Pico(白松露 , 白块菌)。尽管如此,罗马人只食用铁飞兹,一种形似松露的蘑菇。铁飞兹被称为“沙漠松露”。它产自莱斯沃斯岛,迦太基,尤其是利比亚。因为在古时候那些地方的沿海气候要比现今潮湿。中世纪时期中世纪时期,农民使用松露来调味。意大利的萨沃亚家族特别喜欢松露,阿卡加王子给波旁王朝的礼物中常常有松露。教皇从罗马迁居到阿维尼翁后发现了松露并且爱上了它们,每个星期都吃。巴特鲁姆普拉提纳教皇的历史家1481年时记载了寻找松露的事情,他写道:“有一种母猪特别擅长寻找松露,可是人们应该让它们戴上口套,以避免它们将松露吃个精光!”17世纪前文艺复兴时期,松露在欧洲重新流行,它们在法国国王弗朗西斯一世的城堡里天天出现。尽管如此,松露真正的盛行是从17世纪开始的。那时的欧洲人(特别是法国人)放弃重口味的东方香料,重新发现天然食品的价值。十七世纪八十年代松露在巴黎市场是非常受欢迎的美食,法国人全年从松露产区进口各种各样的松露。布里亚萨-萨瓦林说了:“松露是如此之贵,以至于它们只出在贵族的餐桌上用以吸引女性。”17-20世纪1711年,法国植物学家艾蒂安弗朗索瓦若弗鲁瓦第一次将松露定义为一种蘑菇。1729年,佛罗伦萨来的乔瓦尼贝尔纳多维哥准确地定义两种黑松露:黑孢块菌(Tuber Melanosporum)与夏块菌(Tuber Aestivum)。1780年,波兰的让米歇尔博尔奇在他的“关于皮埃蒙特松露的家书”里准确的描述了皮埃蒙特松露的外形和口感。20世纪,意大利的白松露在世界上越来越有名。第二次世界大战后,蒙费拉托,罗埃罗,瓦利库罗内,格吕埃等地区的人们都在积极地收集白松露。现今,松露在很多国内国际博览会有很重要的地位。 [4]中国渊源播报编辑公元664年4月,朝里若、朝拉若从月利巴拉来到直苴腹地泥泽薄打猎,跟踪野猪的时候发现野猪从树根拱出颜色漆黑的球状物哼哼唧唧的吃着,野猪跑了,他们太饿,不得不刨挖野猪拱过地方的东西吃。吃了之后发现这漆黑的球状物不仅能填饱肚子还能增强体力、提高性能力。从此,朝里若、朝拉若把这种不明生物称为猪拱菌,每年直苴彝族赛装节前带领族人采挖猪拱菌,用于接待参加赛装节的尊贵客人,吃猪拱菌这一习俗一直延续到现代。随着外来文化的影响,直到1995年人们才弄明白:猪拱菌也叫松露、块菌,英文truffle,居然是世界上最名贵的食用菌。 [5]相关新闻播报编辑2010年11月,“赌王”何鸿燊以破纪录33万美金,即约港币250多万元,标下两颗共重1.3公斤的意大利托斯拉纳白松露菌和莫利塞白松露菌。这是澳博连续第四年在澳门新葡京酒店举办意大利白松露菌国际慈善拍卖晚宴。 [6]2015年9月20日,黑松露(黑松露野蘑菇汤)荣登美国国宴大雅之堂! [7]2015年10月21日,黑松露(松露酱)荣登英国国宴大雅之堂! [8]2016年8月,澳大利亚发现世界最大松露,该松露为黑松露,重达1.5千克,价值约3000美元。 [9]食物营养成分播报编辑食物名称松露含量参考约每100克食物中的含量能量487 千卡蛋白质4.5 g脂肪34.6 g胆固醇27 mg饱和脂肪酸22.5 g多不饱和脂肪酸1 g单不饱和脂肪酸8.5 g水分16 g碳水化合物41.1 g糖34.3 g膳食纤维2.4 g叶酸11 μg钠46 mg镁85 mg磷156 mg钾362 mg钙50 mg铁3 mg锌1.44 mg碘3.8 μg维生素A139 μg维生素B1(硫胺素)0.04 mg维生素B2(核黄素)0.13 mg烟酸(烟酰胺)1.74 mg维生素D0.1 μg维生素E0.46 mg展开新手上路成长任务编辑入门编辑规则本人编辑我有疑问内容质疑在线客服官方贴吧意见反馈投诉建议举报不良信息未通过词条申诉投诉侵权信息封禁查询与解封©2024 Baidu 使用百度前必读 | 百科协议 | 隐私政策 | 百度百科合作平台 | 京ICP证030173号 京公网安备110000020000

Truffle 配置 | Truffle 中文文档 - DApp 开发框架 | 深入浅出区块链

Truffle 配置 | Truffle 中文文档 - DApp 开发框架 | 深入浅出区块链

深入浅出区块链

Truffle 中文文档

v5.0.0

快速入门 Truffle

创建项目工程

项目结构

使用测试

编译合约

使用 Truffle Develop 部署合约

可选: 通过 Ganache 部署

合约交互

进一步学习

基本功能

安装 Truffle

环境依赖

Windows 用户需了解

创建 Truffle 项目工程

编译合约

合约文件目录

编译命令

构建工件 Artifacts

引入合约依赖文件

通过文件名导入依赖文件

从外部包导入合约

合约部署(Migrations)

部署命令

脚本文件

artifacts.require()

module.exports

初始化迁移功能

部署程序 Deployer

考虑网络

可用账号

部署程序接口 Deployer API

deployer.deploy(contract, args…, options)

deployer.link(library, destinations)

deployer.then(function() {…})

与合约进行交互

介绍

数据的读和写

交易 Transactions

调用 Calls

什么是合约抽象

执行合约函数

执行交易Transactions

执行调用 call

处理交易结果

捕获事件 events

部署新合约

指定合约地址

给合约发送以太

延伸阅读

Truffle 和 MetaMask 配合

MetaMask 是什么?

安装 MetaMask

MetaMask 和 Ganache 搭配使用

探测 MetaMask 注入的 web3

MetaMask 设置

搭配 Truffle Develop 使用 MetaMask

搭配 Ganache CLI 使用 MetaMask

用 EthPM 进行包管理

安装软件包

安装依赖

使用安装的合约

发布自己的软件包

Ropsten, Ropsten, Ropsten

包配置

命令

在发布之前

用 NPM 进行包管理

包文件布局

使用包

安装

在合约代码中使用包

在JavaScript中使用包

包的部署地址

发布之前

调试合约

概述

调试命令

调试器界面

(o) 跳过(step over)

(i) 进入(step into)

(u) 跳出(step out)

(n) 下一步(step next)

(;) 单步指令(step instruction)

(p) 打印指令(print instruction)

(h) print this help

(q) 退出

(r) 重置(reset)

(b) 设置断点(set a breakpoint)

(B) 移除断点(大写的B)

(c) 跳到下一个断点

(+) 添加一个监视表达式

(-) 移除监视表达式

(?) 列出所有的监视表达式及断点

(v) 显示变量

(T) 卸载交易

(t) 加载交易

添加和移除断点

使用控制台

为什么有两个控制台?

命令

登录控制台

登录Develop控制台

配置 Truffle Develop

功能

可用命令

编写外部脚本

命令

文件结构

第三方插件命令

Plugin installation / usage

Creating a custom command plugin

支持 Quorum 开发

已知问题

配置

Using Privacy Features

编写测试用例

测试合约

测试框架

测试用例目录

测试合约命令

”干净的“ 测试环境

速度和可靠性考虑

用 JavaScript 写测试用例

Use contract() instead of describe()

Use contract abstractions within your tests

Using artifacts.require()

Using web3

Examples

Using .then

Using async/await

Specifying tests

Advanced

TypeScript File Support

用 Solidity 写测试用例

Example

Test structure

Assertions

Deployed addresses

Test contract names

Test function names

before / after hooks

Advanced features

Testing for exceptions

Testing ether transactions

高级用法

选择网络及部署

配置

指定网络

Build artifacts

应用部署

构建过程

运行外部命令

Providing a custom function

Creating a custom module

Bootstrapping your application

创建 Truffle Box

创建 box

配置文件

ignore (array)

commands (object)

hooks (object)

图片

Truffle site listing

参考引用

选择以太坊客户端

开发过程中

Ganache

Truffle Develop

Ganache CLI

部署到线上网络

部署到私有网络

Truffle 配置

配置文件位置

解决 Windows 命令名冲突

常用配置选项

网络 networks

提供者 Providers

指定合约目录

指定合约构建生成目录

迁移文件目录

mocha

指定编译器

solc

使用外部编译器

插件 plugins

EthPM 配置

包名:package_name

版本:version

描述:description

作者 authors

关键字 keywords

依赖 dependencies

许可协议 license

合约抽象封装

使用方法

API

Contract Abstraction API

MyContract.new([arg1, arg2, ...], [tx params])

MyContract.at(address)

MyContract.deployed()

MyContract.link(instance)

MyContract.link(name, address)

MyContract.link(object)

MyContract.networks()

MyContract.setProvider(provider)

MyContract.setNetwork(network_id)

MyContract.hasNetwork(network_id)

MyContract.defaults([new_defaults])

MyContract.clone(network_id)

MyContract.numberFormat = number_type

MyContract.timeout(block_timeout)

MyContract.autoGas =

MyContract.gasMultiplier(gas_multiplier)

Contract Instance API

Making a transaction via a contract function

Explicitly making a call instead of a transaction

Calling getters

Processing transaction results

Sending Ether / Triggering the fallback function

Estimating gas usage

Truffle 命令手册

使用方法

命令列表

构建 build

编译合约 compile

config

启动控制台 console

创建 create

调试 debug

部署 deploy

控制台 develop

exec

帮助 help

初始化工程 init

安装 install

migrate

网络 networks

操作码 opcode

发布 publish

运行 run

测试 test

解包 unbox

查看版本 version

监视变化 watch

联系开发者

Gitter

Issue Tracker

Twitter

相关文档

Solidity 中文文档

Web3.js 中文文档

Truffle 中文文档

Docs »

Truffle 配置

Edit on GitHub

Truffle 配置¶

配置文件位置¶

配置文件名为 truffle-config.js ,位于项目目录的根目录下。 它是Javascript文件,可以执行创建配置所需的任何代码。 它必须导出表示项目配置的对象,如下例所示:

module.exports = {

networks: {

development: {

host: "127.0.0.1",

port: 8545,

network_id: "*" // 匹配任何网络

}

}

};

默认配置附带开发网络的配置,运行在 127.0.0.1:8545 上。 还有许多其他配置选项,详情如下。

解决 Windows 命令名冲突¶

警告

仅适用于Truffle 4 及以下版本。

在Windows上使用命令提示符时,默认配置文件名可能会导致与 truffle 可执行文件冲突,因此我们可能无法在现有项目上正确运行Truffle命令。

这是因为命令优先级在命令提示符上的工作方式。 truffle.cmd 可执行文件作为 npm 包的路径上,但 truffle.js 配置文件位于运行 truffle 命令的实际目录中。 而 .js 是默认的可接受的可执行扩展名,truffle.js 优先于 truffle.cmd ,导致意外的结果。

以下任何解决方案都可以解决此问题:

使用 .cmd 扩展名( truffle.cmd compile )显式调用可执行文件。

编辑系统 PATHEXT 环境变量并从可执行扩展列表中删除 .JS; 。

将 truffle.js 重命名为其他东西(truffle-config.js)。

使用 Windows PowerShell 或 Git BASH, 或不会引起冲突的 shell .

常用配置选项¶

网络 networks¶

指定部署网络,以及与每个网络交互时的特定交易参数(例如,gas价格,账号地址等)。 在指定网络上进行编译和部署时,将保存并记录合约工件(artifacts)以供以后使用。

当合约抽象检测到我们的以太坊客户端连接到指定网络时,他们将使用与该网络相关联的合约工件(artifacts)来简化应用程序部署。 网络是通过以太坊的 net_version RPC调用以及区块链URI来识别。

如下所示,networks 对象由网络名称作为键,并包含定义相应网络参数的对象。

networks 选项是必须项,如果没有网络配置,Truffle将无法部署我们的合约。 truffle init 提供的默认网络配置为我们提供了一个与其连接相匹配的开发网络 - 开发过程中非常有用,但不适合生产部署。

要将Truffle配置连接到其他网络,就需添加更多命名网络(named networks)并指定相应的网络ID。

网络名称可用于提示用户,例如它特定网络上运行迁移:

$ truffle migrate --network live

如:

networks: {

development: {

host: "127.0.0.1",

port: 8545,

network_id: "*", // 匹配任何网络

websockets: true

},

live: {

host: "178.25.19.88", // 用于示例目的的随机IP(不要使用)

port: 80,

network_id: 1, // 以太坊主网

// 可选配置:

// gas

// gasPrice

// from - Truffle 在进行交易是的默认发送地址

// provider - Truffle 用来连接以太坊网络的 web3 provider 实例

// - 如果是一个函数,需要返回 web3 provider 实例 (参考下文)

// - 如果指定了provider, host 和 port 或忽略。

// skipDryRun: - 如果不想在实际迁移之前在本地测试运行迁移,则为true(默认为false)

// timeoutBlocks: - 如果没有交易没有挖出,保持等待的区块数(默认为50)

}

}

不管哪个网络,如果未指定交易选项,则将使用以下默认值:

gas: 指定部署的 gas limit。 默认为 4712388。

gasPrice: 指定部署的 gas价格。 默认为 100000000000(100香农)。

from: 部署时使用的账号地址。 默认为我们的以太坊客户端提供的第一个可用帐户。

provider: 默认web3提供者使用 host 和 port 指定,如 new Web3.providers.HttpProvider("http://:")

websockets: 我们需要启用此功能才能使用 confirmmations 监听器或使用 .on 或 .once 监听事件。 默认为 false 。

对于每个网络,我们可以指定 host / port 或 provider ,但不能同时指定两者。 如果我们需要 HTTP 提供者(Provider),我们建议使用 host 和 port ,而如果我们需要自定义提供者(Provider),如HDWalletProvider,则必须使用 provider 。

提供者 Providers¶

以下网络列表由本地测试网络和 Infura 托管的 Ropsten 网络组成,两者均由 HDWalletProvider 提供。 确保在函数闭包中包装(wrap) truffle-hdwallet 提供者(Provider),如下所示,以确保一次只连接一个网络。

networks: {

ropsten: {

provider: function() {

return new HDWalletProvider(mnemonic, "https://ropsten.infura.io/v3/YOUR-PROJECT-ID");

},

network_id: '3',

},

test: {

provider: function() {

return new HDWalletProvider(mnemonic, "http://127.0.0.1:8545/");

},

network_id: '*',

},

}

如果指定 host 和 port 而不是 provider ,Truffle将使用该主机和端口创建自己的默认 HTTP 提供者(Provider),在这种情况下,我们将无法使用自定义提供者(Provider)。

指定合约目录¶

默认(未编译合约)目录的是位于项目根目录的 ./contacts 。 如果我们希望将合约保存在不同的目录中,则可以指定 contracts_directory 属性。

例如,让Truffle在编译时在 ./allMyStuff/someStuff/theContractFolder(递归)文件中查找合约:

module.exports = {

contracts_directory: "./allMyStuff/someStuff/theContractFolder",

networks: {

development: {

host: "127.0.0.1",

port: 8545,

network_id: "*",

}

}

};

注解

除了指定相对路径外,还可以使用 globs/regular 表达式来有选择地编译合约。

指定合约构建生成目录¶

编译合约的默认输出目录是相对于项目根目录的 ./build/contracts 。 这可以使用 contracts_build_directory 属性进行更改。

例如,将构建的合约工件(artifacts)放在 ./output/contracts 中:

module.exports = {

contracts_build_directory: "./output",

networks: {

development: {

host: "127.0.0.1",

port: 8545,

network_id: "*",

}

}

};

构建的合约工件(artifacts)不需要位于项目根目录中:

module.exports = {

contracts_build_directory: "../../../output",

networks: {

development: {

host: "127.0.0.1",

port: 8545,

network_id: "*",

}

}

};

绝对路径也可以,但是不建议这样做,因为在另一个系统上编译时可能不存在绝对路径。 如果在Windows上使用绝对路径,请确保对路径使用双反斜杠(例如:C:\\Users\\Username\\output)。

迁移文件目录¶

默认迁移目录是项目根目录下的 ./migrations 文件夹。 可以使用 migrations_directory 更改此设置。

如:

module.exports = {

migrations_directory: "./allMyStuff/someStuff/theMigrationsFolder",

networks: {

development: {

host: "127.0.0.1",

port: 8545,

network_id: "*",

}

}

};

mocha¶

MochaJS 测试框架的配置选项。 此配置需要一个对象,详见Mocha的文档。

例如:

mocha: {

useColors: true

}

指定编译器¶

在 compilers 对象中,我们可以指定与Truffle使用的编译器相关的设置。

solc¶

Solidity编译器设置, 支持 solc 的优化器(optimizer)设置。

可以指定…

solc-bin 上列出的所有的 solc-js 版本,需要的话,可以指定一个,Truffle 会自动获取它。

一个原生编译的 solc (需要自己安装,下面的链接帮助)。

这里有发布的docker竞相的(dockerized )solc 。

本地可用的 solc 路径

Truffle 配置示例:

module.exports = {

compilers: {

solc: {

version: , // 版本号或约束字符串 - 如: "^0.5.0"

// 也可以指定为 "native" ,表示使用 native solc

docker: , // 使用通过 docker 获得的版本

settings: {

optimizer: {

enabled: ,

runs: // 优化次数

}

evmVersion: // 默认: "byzantium"

}

}

}

}

有关详细信息,请参阅Solidity文档 - 编译器输入输出JSON描述.

使用外部编译器¶

如果要使用创建工件的更高级用法,可以使用外部编译器配置。

可以通过在Truffle配置中添加 compilers.external 对象来使用此功能:

module.exports = {

compilers: {

external: {

command: "./compile-contracts",

targets: [{

/* 编译输出 */

}]

}

}

}

当我们运行 truffle compile 时,Truffle 将运行已配置的命令并查找 targets 指定的合约工件(artifacts)。

这个配置支持的几个主要用例:

编译命令可直接输出 Truffle JSON 工件(artifacts)。

如果编译命令能直接生成工件(artifacts),或生成包含工件的所有信息的输出,请按如下方式配置目标(target):

module.exports = {

compilers: {

external: {

command: "./compile-contracts",

targets: [{

path: "./path/to/artifacts/*.json"

}]

}

}

}

Truffle 将执行我们的脚本,然后展开glob(*)并查找列出的路径中的所有.json文件,并将它们作为工件复制到 build/contracts/ 目录中。

编译命令输出工件的各个部分,我们希望Truffle 生成工件(artifacts)。

上述用例可能不适用于所有用例。 我们可以将 target 配置为运行“后处理命令”,如:

module.exports = {

compilers: {

external: {

command: "./compile-contracts",

targets: [{

path: "./path/to/preprocessed-artifacts/*.json",

command: "./process-artifact"

}]

}

}

}

这将为每个匹配的 .json 文件运行 ./process-artifact ,该文件的内容作为 stdin 管道传输。 然后 ./process-artifact 命令(期望)输出一个完整的 Truffle 工件(artifact)作为 stdout。

如果想要提供路径代替文件名? 在 taget 配置中添加 stdin: false。

我们还可以指定合约的各个属性,并让 Truffle 自己生成工件 (artifacts)。

module.exports = {

compilers: {

external: {

command: "./compile-contracts",

targets: [{

properties: {

contractName: "MyContract",

/* other literal properties */

},

fileProperties: {

abi: "./output/contract.abi",

bytecode: "./output/contract.bytecode",

/* other properties encoded in output files */

}

}]

}

}

}

指定 properties 和/或 fileProperties ,Truffle 将在构建工件时查找这些值。

要覆盖所有指定路径和运行命令的工作目录,请使用 workingDirectory 选项。

例如,以下将运行 ./proj/compile-contracts 并读取 ./proj/output/contract.abi :

module.exports = {

compilers: {

external: {

command: "./compile-contracts",

workingDirectory: "./proj",

targets: [{

fileProperties: {

abi: "./output/contract.abi",

bytecode: "./output/contract.bytecode",

}

}]

}

}

}

插件 plugins¶

注解

仍处于”准系统状态”的新功能,同时还可向 Truffle 反馈改进意见!

为Truffle提供通过 NPM 安装(通过 dependencies 安装的)的第三方扩展的列表。

Truffle 插件目前仅支持自定义工作流命令的插件。 有关更多信息,请参阅第三方插件命令-编写脚本。

EthPM 配置¶

此配置是可选的,配置文件为 ethpm.json 和 truffle.js 在同一目录下。

包名:package_name¶

我们要发布的包的名称,包名称不能和已有 EthPM 注册表的包名相同(确保 unique)。

举例:

package_name: "adder"

版本:version¶

该软件包的版本,使用[semver](http://semver.org/)规范。

举例:

version: "0.0.3"

描述:description¶

人类可读的文字说明。

举例:

description: "Simple contract to add two numbers"

作者 authors¶

作者列表,可以有任何格式,但我们建议采用以下格式。

举例:

authors: [

"Tim Coulter "

]

关键字 keywords¶

关键字列表,使用有用的类别标记此包。

举例:

keywords: [

"ethereum",

"addition"

],

依赖 dependencies¶

版本范围使用semver规范,列出软件包所依赖的EthPM软件包。

举例:

dependencies: {

"owned": "^0.0.1",

"erc20-token": "1.0.0"

}

许可协议 license¶

用于此程序包的许可证,严格提供。

举例:

license: "MIT",

Next

Previous

© Copyright 2019, 深入浅出区块链

最后更新于 2019/05/21.

Built with Sphinx using a theme provided by Read the Docs.

Truffle 命令手册 | Truffle 中文文档 - DApp 开发框架 | 深入浅出区块链

Truffle 命令手册 | Truffle 中文文档 - DApp 开发框架 | 深入浅出区块链

深入浅出区块链

Truffle 中文文档

v5.0.0

快速入门 Truffle

创建项目工程

项目结构

使用测试

编译合约

使用 Truffle Develop 部署合约

可选: 通过 Ganache 部署

合约交互

进一步学习

基本功能

安装 Truffle

环境依赖

Windows 用户需了解

创建 Truffle 项目工程

编译合约

合约文件目录

编译命令

构建工件 Artifacts

引入合约依赖文件

通过文件名导入依赖文件

从外部包导入合约

合约部署(Migrations)

部署命令

脚本文件

artifacts.require()

module.exports

初始化迁移功能

部署程序 Deployer

考虑网络

可用账号

部署程序接口 Deployer API

deployer.deploy(contract, args…, options)

deployer.link(library, destinations)

deployer.then(function() {…})

与合约进行交互

介绍

数据的读和写

交易 Transactions

调用 Calls

什么是合约抽象

执行合约函数

执行交易Transactions

执行调用 call

处理交易结果

捕获事件 events

部署新合约

指定合约地址

给合约发送以太

延伸阅读

Truffle 和 MetaMask 配合

MetaMask 是什么?

安装 MetaMask

MetaMask 和 Ganache 搭配使用

探测 MetaMask 注入的 web3

MetaMask 设置

搭配 Truffle Develop 使用 MetaMask

搭配 Ganache CLI 使用 MetaMask

用 EthPM 进行包管理

安装软件包

安装依赖

使用安装的合约

发布自己的软件包

Ropsten, Ropsten, Ropsten

包配置

命令

在发布之前

用 NPM 进行包管理

包文件布局

使用包

安装

在合约代码中使用包

在JavaScript中使用包

包的部署地址

发布之前

调试合约

概述

调试命令

调试器界面

(o) 跳过(step over)

(i) 进入(step into)

(u) 跳出(step out)

(n) 下一步(step next)

(;) 单步指令(step instruction)

(p) 打印指令(print instruction)

(h) print this help

(q) 退出

(r) 重置(reset)

(b) 设置断点(set a breakpoint)

(B) 移除断点(大写的B)

(c) 跳到下一个断点

(+) 添加一个监视表达式

(-) 移除监视表达式

(?) 列出所有的监视表达式及断点

(v) 显示变量

(T) 卸载交易

(t) 加载交易

添加和移除断点

使用控制台

为什么有两个控制台?

命令

登录控制台

登录Develop控制台

配置 Truffle Develop

功能

可用命令

编写外部脚本

命令

文件结构

第三方插件命令

Plugin installation / usage

Creating a custom command plugin

支持 Quorum 开发

已知问题

配置

Using Privacy Features

编写测试用例

测试合约

测试框架

测试用例目录

测试合约命令

”干净的“ 测试环境

速度和可靠性考虑

用 JavaScript 写测试用例

Use contract() instead of describe()

Use contract abstractions within your tests

Using artifacts.require()

Using web3

Examples

Using .then

Using async/await

Specifying tests

Advanced

TypeScript File Support

用 Solidity 写测试用例

Example

Test structure

Assertions

Deployed addresses

Test contract names

Test function names

before / after hooks

Advanced features

Testing for exceptions

Testing ether transactions

高级用法

选择网络及部署

配置

指定网络

Build artifacts

应用部署

构建过程

运行外部命令

Providing a custom function

Creating a custom module

Bootstrapping your application

创建 Truffle Box

创建 box

配置文件

ignore (array)

commands (object)

hooks (object)

图片

Truffle site listing

参考引用

选择以太坊客户端

开发过程中

Ganache

Truffle Develop

Ganache CLI

部署到线上网络

部署到私有网络

Truffle 配置

配置文件位置

解决 Windows 命令名冲突

常用配置选项

网络 networks

提供者 Providers

指定合约目录

指定合约构建生成目录

迁移文件目录

mocha

指定编译器

solc

使用外部编译器

插件 plugins

EthPM 配置

包名:package_name

版本:version

描述:description

作者 authors

关键字 keywords

依赖 dependencies

许可协议 license

合约抽象封装

使用方法

API

Contract Abstraction API

MyContract.new([arg1, arg2, ...], [tx params])

MyContract.at(address)

MyContract.deployed()

MyContract.link(instance)

MyContract.link(name, address)

MyContract.link(object)

MyContract.networks()

MyContract.setProvider(provider)

MyContract.setNetwork(network_id)

MyContract.hasNetwork(network_id)

MyContract.defaults([new_defaults])

MyContract.clone(network_id)

MyContract.numberFormat = number_type

MyContract.timeout(block_timeout)

MyContract.autoGas =

MyContract.gasMultiplier(gas_multiplier)

Contract Instance API

Making a transaction via a contract function

Explicitly making a call instead of a transaction

Calling getters

Processing transaction results

Sending Ether / Triggering the fallback function

Estimating gas usage

Truffle 命令手册

使用方法

命令列表

构建 build

编译合约 compile

config

启动控制台 console

创建 create

调试 debug

部署 deploy

控制台 develop

exec

帮助 help

初始化工程 init

安装 install

migrate

网络 networks

操作码 opcode

发布 publish

运行 run

测试 test

解包 unbox

查看版本 version

监视变化 watch

联系开发者

Gitter

Issue Tracker

Twitter

相关文档

Solidity 中文文档

Web3.js 中文文档

Truffle 中文文档

Docs »

Truffle 命令手册

Edit on GitHub

Truffle 命令手册¶

本节将介绍Truffle应用程序中可用的每个命令。

使用方法¶

所有命令均采用以下形式:

truffle [options]

传递没有参数相当于 truffle help ,将显示所有命令然后退出。

Passing no arguments is equivalent to truffle help, which will display a list of all commands and then exit.

命令列表¶

构建 build¶

已弃用。

truffle build

编译合约 compile¶

编译合约源文件。

truffle compile [--list ] [--all] [--network ] [--quiet]

除非另有说明,否则将仅编译自上次编译以来已更改的合约。

选项:

--list : 从solc-bin列出所有最近的稳定版本。如果指定了filter,则它将仅显示匹配的版本。 filter参数可以为:prereleases, releases, latestRelease or docker。

--all: 编译所有合约,而不是仅编译自上次编译后更改的合约。

--network : 指定要使用的网络,保存特定于该网络的工件(artifacts)。网络名称必须存在于配置文件中。

--quiet: 取消所有编译输出。

config¶

显示是启用还是禁用分析,并提示是否切换设置。

truffle config [--enable-analytics|--disable-analytics]

选项:

--enable-analytics|--disable-analytics: 启用或禁用分析。

启动控制台 console¶

运行具有合约抽象和命令的控制台。

truffle console [--network ] [--verbose-rpc]

通过命令行与合约进行交互的接口。此外,许多 Truffle 命令在控制台中使用(不需要 truffle 前缀)

需要外部以太坊客户端,例如Ganache 或 geth ,则使用 truffle develop 创建开发和测试环境的控制台。

有关详细信息,请参阅使用控制台 。

选项:

--network : :指定要使用的网络。网络名称必须存在于配置中。

--verbose-rpc: 记录Truffle和以太坊客户端之间的通信log。

创建 create¶

用于创建新的合约,迁移和测试。

truffle create

选项:

: (必须项) 创建一个新合约,迁移和测试, artifact_type 可以是:contract, migration 或 test. 创建的文件通常像这样: contracts/ArtifactName.sol, migrations/####_artifact_name.js or tests/artifact_name.js.

: (必须项) 新工件(合约,迁移和测试)的名称。

Camel 的命名将转换为下划线分隔的文件名,以用于迁移和测试。将自动生成迁移的编号前缀。

调试 debug¶

交互式调试区块链上的任何事务。

truffle debug

将在特定事务上启动交互式调试会话。允许您逐步执行每个操作并重播(replay)。有关详细信息,请参阅调试合约 。

注解

警告:调试命令依然是实验性的。

选项:

: 用于调试的事务ID。 (必须项)

部署 deploy¶

migrate 的别名. 参考 migrate 。

控制台 develop¶

使用框架集成的 develop 链打开控制台

truffle develop

通过命令行与框架集成的 develop 链上合约进行交互的接口。此外,许多 Truffle 命令在控制台中使用(不需要 truffle 前缀)

如果想要现有的区块链上合约进行交互,请使用 truffle console 。

有关详细信息,请参阅使用控制台 。

exec¶

在Truffle环境中执行JS模块。

truffle exec [--network ] [--compile]

会引入 web3 ,根据指定的网络(如果有)设置默认提供者(provider),并在执行脚本时将引入我们的合约作为全局对象。提供的脚本必须导出Truffle可以运行的函数。

有关详细信息,请参阅编写外部脚本 。

选项:

: 要执行的JavaScript文件。如果当前目录中不存在脚本,则可以包含路径信息。 (必须)

--network : 指定要使用的网络。网络名称必须存在于配置中。

--compile: 在执行脚本之前编译合约。

帮助 help¶

显示所有命令的列表或特定命令的信息。

truffle help []

选项:

: 指定命令,显示指定命令的使用信息。

初始化工程 init¶

初始化新的(空的)以太坊项目

truffle init [--force]

在当前工作目录中创建一个新的空Truffle项目。

注解

警告: 较旧版本的 Truffle 使用 truffle init bare 来创建一个空项目。此用法已被弃用。

基于某一个实例来创建应该使用如 truffle unbox MetaCoin 。

选项:

--force: 无论当前工作目录的状态如何,都要初始化项目。请注意,这可能会覆盖名称冲突的现有文件。

安装 install¶

从以太坊包注册表(Ethereum Package Registry)安装包。

truffle install [@]

选项:

: 以太坊包注册表中列出的包的名称。 (必须)

@: 指定时,会安装特定版本的软件包,否则会安装最新版本。

有关详细信息,请参阅使用EthPM进行包管理 。

migrate¶

运行迁移文件以部署合约。

truffle migrate [--reset] [--f ] [--to ] [--network ] [--compile-all] [--verbose-rpc] [--dry-run] [--interactive]

除非指定,否则将从上次完成的迁移开始。有关详细信息,请参阅(迁移)合约部署 。

选项:

--reset: 从头开始运行所有迁移,而不是从上次完成的迁移中运行。

--f : 从特定的迁移中运行合约。该数字指的是迁移文件的前缀。

--to : 运行合约到特定的迁移。该数字指的是迁移文件的前缀。

--network : 指定要使用的网络,网络名称必须存在于配置中。

--compile-all: 编译所有合约,而不是智能地选择需要编译的合约。

--verbose-rpc: 记录Truffle和以太坊客户端之间的通信日志。

--dry-run: 分叉(fork - 复制)指定的网络并仅执行测试迁移。

--interactive: 在 dry run 之后,提示确认用户是否要继续。

网络 networks¶

显示每个网络上已部署合约的地址。

truffle networks [--clean]

在发布包之前使用此命令,以查看是否存在不希望发布的任何无关的网络的工件(artifacts)。如果未指定选项,只输出当前的工件状态。

选项:

--clean: 删除所有与命名网络(named network , 是指在配置文件中指明的网络)无关的网络工件。

操作码 opcode¶

打印给定合约的已编译操作码。

truffle opcode

选项:

: 要打印操作码的合约的名称。必须是合约名称,而不是文件名。(必须)

发布 publish¶

将包发布到以太坊包注册表(Ethereum Package Registry)。

truffle publish

所有参数都从项目的配置文件中提取。没有参数,有关详细信息,请参阅使用EthPM进行包管理 。

运行 run¶

注解

仍处于”准系统状态”的新功能,可向 Truffle 反馈改进意见!

运行第三方插件命令

truffle run

选项:

: 由已安装的插件定义的命令的名称。(必须)

安装插件作为NPM包依赖项存在,参考Truffle 配置 了解插件

有关更多信息,请参阅第三方插件命令.

测试 test¶

运行JavaScript和Solidity测试用例。

truffle test [] [--compile-all] [--network ] [--verbose-rpc] [--show-events]

运行 test/ 目录中的全部测试用例,或指定用例文件。有关详细信息,请参阅 测试合约 。

选项:

: 要运行的测试文件的名称。如果当前目录中不存在该文件,则可以包含路径信息。

--compile-all: 编译所有合约,而不是智能地选择需要编译的合约。

--network : 指定要使用的网络,网络名称必须存在于配置中。

--verbose-rpc: 记录Truffle和以太坊客户端之间的通信日志。

--show-events: 记录所有合约的事件。

解包 unbox¶

下载Truffle Box , 它是一个预制(pre-built)的 Truffle 工程。

truffle unbox

下载 Truffle Box 到当前工作目录。请参阅可用boxes列表.

还可以设计和创建自己的boxes! 有关详细信息,请参阅Truffle boxes 。

选项:

: Truffle Box 的名称(必须 required)

--force: 强制在当前目录中的解包项目,无论其状态如何。请注意,这可能会覆盖目录中存在的文件。

查看版本 version¶

显示版本号并退出。

truffle version

监视变化 watch¶

监视文件系统以进行更改并自动重新构建(rebuild) 项目。

truffle watch

此命令将启动对合约,应用程序和配置文件更改的监视。当有更改时,它将根据需要重新构建应用程序。

注解

警告:不推荐使用此命令。请使用外部工具来监视文件系统更改并重新运行测试。

Next

Previous

© Copyright 2019, 深入浅出区块链

最后更新于 2019/05/21.

Built with Sphinx using a theme provided by Read the Docs.

truffle是什么意思_truffle的翻译_音标_读音_用法_例句_爱词霸在线词典

fle是什么意思_truffle的翻译_音标_读音_用法_例句_爱词霸在线词典首页翻译背单词写作校对词霸下载用户反馈专栏平台登录truffle是什么意思_truffle用英语怎么说_truffle的翻译_truffle翻译成_truffle的中文意思_truffle怎么读,truffle的读音,truffle的用法,truffle的例句翻译人工翻译试试人工翻译翻译全文简明柯林斯牛津truffle英 [ˈtrʌfl]美 [ˈtrʌfəl]释义n.块菌; 松露点击 人工翻译,了解更多 人工释义词态变化复数: truffles;实用场景例句全部块菌松露How about a rose or violet truffle?来一块玫瑰或紫罗兰香味的巧克力糖 如何 ?期刊摘选Mongfish Foie Gras and Truffle White Fish Caviar with Potato and Celery Root Salad.魔鬼鱼肝及松露菌白鱼的鱼子拌薯仔芹菜根沙律.期刊摘选Intense currants, black berries, truffle and vanilla oak in palate, finish in length.浓郁的黑醋栗 、 黑浆果 、 黑松露和香草橡木味道, 余韵优雅悠长.期刊摘选Elegant and round tannins structure with intense blackcurrant, cherries fruits, vanilla, chocolate and truffle.柔和的丹宁配合优雅的黑醋栗 、 樱桃 、 橡木和巧克力味道.期刊摘选The pig nuzzled the truffle.这头猪拱土寻找块菌.期刊摘选Present the original taste of top luscious material including filet steak, goose liver, and truffle.炭烤表面胶封其肉汁原味, 再搭配油脂适中的鹅肝与松露提味,展现食材的原味.期刊摘选The pigs rooted for truffle in this forest.猪在森林里用嘴拱土寻找块菌.期刊摘选Heat oil in wok, quick stir the black truffle paste until aromatic.烧热油镬, 快手炒香黑松露酱.期刊摘选In 2007, a large white truffle from Italy was sold for the highest price ever.在2007年的拍卖会上, 来自意大利托斯卡尼的[世纪白松露菌]更以天价被投得.期刊摘选Truffle mushrooms are plentiful in the southwest Algeria desert.块菌蕈类在西南部的阿尔及利亚沙漠是丰富的.期刊摘选Vernon zhong : good. Please help us two for both fried truffle goose liver matsuzaka steak.仲天骐: 好, 那帮我们各来一客香煎松露鹅肝松阪牛排.期刊摘选Smooth tannins texture , concentrated black fruits , truffle, chocolate and vanilla oak taste.丹宁圆润, 充满浓郁的黒松露 、 巧克力和香草橡木味道.期刊摘选Elegant tannins combined with intense truffle, chocolate and herbs. Persistent black fruits in lingering finish.丹宁优雅配合浓郁的黒松露 、 巧克力和香草口感, 黑浆果实味道令余韵更为悠长.期刊摘选收起实用场景例句英英释义Noun1. any of various highly prized edible subterranean fungi of the genus Tuber; grow naturally in southwestern Europe2. edible subterranean fungus of the genus Tuber3. creamy chocolate candy收起英英释义同义词mushroomfungus释义词态变化实用场景例句英英释义