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

1、下载安装nodejs

 通过nvm方式可以将nodejs版本下载为16版本

# 安装nvm
curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.2/install.sh | bash

# 若出现因网络问题导致长时间下载失败,可尝试以下命令
curl -o- https://gitee.com/mirrors/nvm/raw/v0.33.2/install.sh | bash

# 加载nvm配置
source ~/.$(basename $SHELL)rc
# 安装Node.js 8
nvm install 16

 如果出现连接不上GitHub的问题可以移步看我的另一篇博客Failed toconnect to github.com port 443: 拒绝连接 Could not resolve host: github.com_晚风皆是过客.的博客-CSDN博客

 下载完成之后

#查询下载好的版本
node -v

npm -v

nvm --version

 truffle入门(一)--【区块链】_第1张图片

 

2、安装 Truffle

2.1、环境依赖

  • NodeJS v8.9.4 或 之后的版本

  • 安装命令

npm install -g truffle

 2.2、创建项目工程

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

为 Truffle 项目创建新目录:

mkdir MetaCoin
cd MetaCoin

 下载 (“unbox”) MetaCoin box:

truffle unbox metacoin

 下载不成功用下面这个命令

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

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

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

  • contracts/: Solidity合约目录

  • migrations/: 部署脚本文件目录

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

  • truffle.js: Truffle 配置文件

2.3、项目结构

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

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

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

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

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

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

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

 2.4、使用测试

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

truffle test ./test/TestMetacoin.sol

 完成结果截图如下

truffle入门(一)--【区块链】_第2张图片

 运行 JavaScript 测试用例

truffle test ./test/metacoin.js

 完成结果如图

truffle入门(一)--【区块链】_第3张图片

 2.5、编译合约

编译智能合约:

truffle compile

 我已经编译过了忘记抠图了ovo(下面这是提示已经编译过了)

 

3、报错处理

3.1、错误1

/home/csdn/.nvm/versions/node/v8.17.0/lib/node_modules/truffle/build/3618.bundled.js:24504
            return _this.outputFormatter && res ? _this.outputFormatter(res, this?.hexFormat) : res;

SyntaxError: Unexpected token .
    at createScript (vm.js:80:10)
    at Object.runInThisContext (vm.js:139:10)
    at Module._compile (module.js:617:28)
    at Object.Module._extensions..js (module.js:664:10)
    at Module.load (module.js:566:32)
    at tryModuleLoad (module.js:506:12)
    at Function.Module._load (module.js:498:3)
    at Module.require (module.js:597:17)
    at require (internal/module.js:11:18)
    at Object.__webpack_require__.f.require (/home/csdn/.nvm/versions/node/v8.17.0/lib/node_modules/truffle/build/cli.bundled.js:608:28)
truffle入门(一)--【区块链】_第4张图片

 这个错误完全是因为自己node版本不够,使用nvm方式下载的可以通过 nvm list查看自己有的nodejs版本通过nvm  use 16(对应自己有的版本号)切换nodejs版本,切换完成之后在查一下nodejs版本即可

3.2、错误2

SyntaxError: Unexpected token '.'
    at wrapSafe (internal/modules/cjs/loader.js:915:16)
    at Module._compile (internal/modules/cjs/loader.js:963:27)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1027:10)
    at Module.load (internal/modules/cjs/loader.js:863:32)
    at Function.Module._load (internal/modules/cjs/loader.js:708:14)
    at Module.require (internal/modules/cjs/loader.js:887:19)
    at require (internal/modules/cjs/helpers.js:74:18)
    at Object.__webpack_require__.f.require (/home/csdn/.nvm/versions/node/v12.22.12/lib/node_modules/truffle/build/cli.bundled.js:608:28)
    at /home/csdn/.nvm/versions/node/v12.22.12/lib/node_modules/truffle/build/cli.bundled.js:538:40
    at Array.reduce ()

    at postinstallObtain (/home/csdn/.nvm/versions/node/v12.22.12/lib/node_modules/truffle/scripts/postinstall.js:13:11)
    at Object. (/home/csdn/.nvm/versions/node/v12.22.12/lib/node_modules/truffle/scripts/postinstall.js:20:3)
    at Module._compile (internal/modules/cjs/loader.js:999:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1027:10)
    at Module.load (internal/modules/cjs/loader.js:863:32)
    at Function.Module._load (internal/modules/cjs/loader.js:708:14)
    at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:60:12)
    at internal/main/run_main_module.js:17:47

这个问题是因为所下载的truffle过多缓存过多清理一下缓存重新下载即可

npm uninstall -g truffle
npm install -g truffle

 3.3、错误3

✖ Downloading
Unbox failed!
RequestError: getaddrinfo ENOTFOUND codeload.github.com
    at ClientRequest. (/home/csdn/.nvm/versions/node/v16.20.1/lib/node_modules/truffle/build/webpack:/node_modules/download/node_modules/got/index.js:182:1)
    at Object.onceWrapper (node:events:628:26)
    at ClientRequest.emit (node:events:513:28)
    at TLSSocket.socketErrorListener (node:_http_client:494:9)
    at TLSSocket.emit (node:events:513:28)
    at emitErrorNT (node:internal/streams/destroy:157:8)
    at emitErrorCloseNT (node:internal/streams/destroy:122:3)
    at processTicksAndRejections (node:internal/process/task_queues:83:21)
Truffle v5.11.0 (core: 5.11.0)
Node v16.20.1
truffle入门(一)--【区块链】_第5张图片

 这是因为电脑连接不成功GitHub导致拉去不下来代码可以尝试换个命令 

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

3.4、错误4

Error: Could not find artifacts for /home/csdn/fisco/MetaCoin/metacoin-box/test/TestMetacoin.sol from any sources
    at Resolver.require (/home/csdn/.nvm/versions/node/v16.20.1/lib/node_modules/truffle/build/webpack:/packages/resolver/dist/lib/resolver.js:53:1)
    at /home/csdn/.nvm/versions/node/v16.20.1/lib/node_modules/truffle/build/webpack:/packages/test/dist/src/Test.js:139:1
    at Array.map ()
    at Object. (/home/csdn/.nvm/versions/node/v16.20.1/lib/node_modules/truffle/build/webpack:/packages/test/dist/src/Test.js:138:1)
    at Generator.next ()
    at fulfilled (/home/csdn/.nvm/versions/node/v16.20.1/lib/node_modules/truffle/build/webpack:/packages/test/dist/src/Test.js:28:43)
Truffle v5.11.0 (core: 5.11.0)
Node v16.20.1

truffle入门(一)--【区块链】_第6张图片

 这是因为名称的错误仔细观察可以看到test目录下面的TestMetaCoin.sol文件名称不对应执行命令的时候修改为test文件里面的sol文件即可

你可能感兴趣的:(fisco-bcos,区块链,linux,运维)