精华内容
下载资源
问答
  • 这是一个基于以太坊智能合约的宠物商店Dapp,使用truffle框架,Solidity编写,仅用于测试 项目背景 Pete有一个宠物店,有16只宠物,他想开发一个去中心化应用,让大家来领养宠物。 在truffle box中,已经提供了pet-...
  • 记录truffle框架使用的过程以及一些坑 首先安装node.js 官网下载并安装 建议使用最新版吧,避免一些不明所以的坑 安装truffle框架 npm install -g truffle@5.07 为什么使用这个版本呢(我测试了好几个版本,感觉这...
  • truffle框架初使用

    千次阅读 2019-03-08 20:55:36
    truffle使用1、下载1.1、nodejs1.2、truffle 1、下载 1.1、nodejs 前往nodejs官网下载,傻瓜式安装。 1.2、truffle npm install -g truffle

    1、下载

    本机环境使用Win10专业版、Atom、Metamask,关于Atom、Metamask钱包的安装使用,可以浏览我的一篇博客:开发Solidity的IDE推荐

    1.1、nodejs

    前往nodejs官网,选择下图左边的LTS版本下载,下载完成后傻瓜式安装。

    nodejs

    1.2、truffle

    npm install -g truffle
    

    下载完成后查看版本信息:

    truffle version
    

    正常情况下返回如下信息:

    Truffle v5.0.2 (core: 5.0.2)
    Solidity v0.5.0 (solc-js)
    Node v8.12.0

    2、新建truffle项目

    2.1、创建简单项目

    新建个项目文件,如:demo1,在demo1的根目录下,运行cmd并输入如下命令

    truffle init
    

    运行完成后,在Atom中打开demo1,可以看到其项目结构如下:

    demo1
    contracts:存放合约文件,默认存在Migrations.sol文件
    migrations:存放接口文件,默认存在1_initial_migrations.js文件
    test:初始为空,存放测试用例文件

    新建合约文件,在contracts中新建文件HelloWorld.sol文件。

    pragma solidity ^ 0.5.0;
    contract HelloWorld {
      function test() pure public returns (string memory) {
        return 'HelloWorld';
      }
    }
    

    2.2、编译合约文件

    2.2.1、开启truffle框架私有链

    在demo1的根目录下,执行下列命令:

    truffle develop
    

    正常情况下会开启truffle框架的私有链,端口为:localhost:9545与以太坊私有链localhost:8545不同),并输出以下内容:

    truffle develop
    给出了10个默认账户和私钥,转账不需要密码,既为空就好:""

    可以通过web3访问该私有链,如下:

    truffle(develop)>web3.eth.getCoinbase()
    ‘0x9a37e2b824bb3fbd4429d0ceb2c7ef3471cb0fe3’

    使用Metamask钱包连接当前私有链:

    Metamask
    通过自定义RPC,连接localhost:9545,另外一定要注意network的id,可以输入networks命令进行查看,不然后面开发多个truffle项目时,会出现交易错误和转账错误,如:区块链项目开发常见错误-2-rpc error with payload,如果你之前忘记设置,一定先要重设账户后再重新添加。
    但是连接后,账号中并没有以太币,我们可以通过web3的命令来转账,如下命令所示:

    truffle(develop)>web3.eth.sendTransaction({from:"0x9A37E2b824bB3FBd4429D0CEb2c7ef3471cb0fE3",to:"0x2090500323e31d59e097ebb59aa8f410af3ce4d2",value:'10000000000000000000'})
    from:“0x9A37E2b824bB3FBd4429D0CEb2c7ef3471cb0fE3”:当前私有链的矿工账户
    to:"0x2090500323e31d59e097ebb59aa8f410af3ce4d2"这是我钱包中的账号
    value:‘10000000000000000000’:转账金额

    正常情况下返回以下内容,就是本次转账的哈希值以及区块地址,(并没有挖矿的过程,应该立刻就会返回如下内容):

    { transactionHash: ‘0x084c2c2e634def470ceb3e599da616cb9cc316d74500e718d0d5485d045ccebe’,
    transactionIndex: 0,
    blockHash: ‘0x7e49cba0be0cb19d16f3b442b6fc5531354d883f4ab8659f3774996a77430a85’,
    blockNumber: 1,
    from: ‘0x9a37e2b824bb3fbd4429d0ceb2c7ef3471cb0fe3’,
    to: ‘0x2090500323e31d59e097ebb59aa8f410af3ce4d2’,
    gasUsed: 21000,
    cumulativeGasUsed: 21000,
    contractAddress: null,
    logs: [],
    status: true,
    logsBloom: ‘0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000’,
    v: ‘0x1b’,
    r: ‘0xdd5c45bb431a6b8e75bb5d09e5ccd6339d8ec4f0368603cea1d313a31681bcd6’,
    s: ‘0x56f86f10732a059bbdf7e7572f9e912b34e59e90542351be9a76b5a71aee4a1a’ }

    此时Metamask钱包中就会收到这笔ETH:

    Metamask

    2.2.2、编译合约文件

    合约已经编写完毕。那如何编译呢,平时使用solcjs进行编译合约,而在truffle中止需要输入如下命令:

    truffle(develop)> compile

    正常情况下,如果你的合约文件没有问题的话,是没有返回任何内容的(初学者建议使用我上面写的HelloWorld.sol文件),但是我们的项目中会出现一个新的文件夹:build,结构如下:

    build文件
    此时我们的合约文件就编译完成了,新生成的json文件包含与其相关的abi文件
    在这里插入图片描述
    上图不完整

    2.2.3、部署合约上链

    在migrations文件下新建文件2_deploy_helloworld.js,并在其中写入如下代码:

    const HelloWorld = artifacts.require("./HelloWorld");
    module.exports = function(deployer) {
      deployer.deploy(HelloWorld);
    };
    

    在命令行中输入如下命令,就已经部署成功:

    truffle(develop)> migrate

    正常情况下会返回如下内容:

    ⚠️ Important ⚠️
    If you’re using an HDWalletProvider, it must be Web3 1.0 enabled or your migration will hang.
    Starting migrations…
    ======================
    Network name: ‘develop’
    Network id: 4447
    Block gas limit: 6721975
    1_initial_migration.js
    ======================
    Deploying ‘Migrations’
    ----------------------
    transaction hash: 0x0a43458915fbea5485dc516fe2ae8d3262b3b907afaad9cb3a861fce24433d58
    Blocks: 0 Seconds: 0
    contract address: 0x6D8cB434D9E4f8B8872AAe6Eda5330873dB35D63
    account: 0x9A37E2b824bB3FBd4429D0CEb2c7ef3471cb0fE3
    balance: 89.99426112
    gas used: 284844
    gas price: 20 gwei
    value sent: 0 ETH
    total cost: 0.00569688 ETH
    Saving artifacts
    -------------------------------------
    Total cost: 0.00569688 ETH
    2_deploy_helloworld.js
    ======================
    Replacing ‘HelloWorld’
    ----------------------
    transaction hash: 0x0d7e7296125586234d0e01111854d236fff237760cb200c9ade74726ccfadb7f
    Blocks: 0 Seconds: 0
    contract address: 0x487B6C076809d7Db11C9B5fF75A4289f1A739914
    account: 0x9A37E2b824bB3FBd4429D0CEb2c7ef3471cb0fE3
    balance: 89.99153386
    gas used: 136363
    gas price: 20 gwei
    value sent: 0 ETH
    total cost: 0.00272726 ETH
    Saving artifacts
    -------------------------------------
    Total cost: 0.00272726 ETH
    Summary
    =======
    Total deployments: 2
    Final cost: 0.00842414 ETH

    2.2.4、获取合约实例

    经过上述步骤我们已经将合约部署到了truffle私有链上,那么下面就要创建合约实例,来调用合约文件。在命令行中输入如下命令:

    truffle(develop)> var helloWorld
    undefined
    truffle(develop)>HelloWorld.deployed().then((instance)=>{helloWorld=instance})
    undefined

    这样合约实例就创建成功了,查看合约实例,输入如下命令:

    truffle(develop)> helloWorld
    TruffleContract {
    constructor:
    { [Function: TruffleContract]
    _constructorMethods:
    { setProvider: [Function: setProvider],
    new: [Function: new],
    at: [Function: at],
    deployed: [Function: deployed],
    defaults: [Function: defaults],
    hasNetwork: [Function: hasNetwork],
    isDeployed: [Function: isDeployed],
    detectNetwork: [Function: detectNetwork],
    setNetwork: [Function: setNetwork],
    setWallet: [Function: setWallet],
    resetAddress: [Function: resetAddress],
    link: [Function: link],
    clone: [Function: clone],
    addProp: [Function: addProp],
    toJSON: [Function: toJSON],
    decodeLogs: [Function: decodeLogs] },
    _properties:
    { contract_name: [Object],
    contractName: [Object],
    gasMultiplier: [Object],
    timeoutBlocks: [Object],
    autoGas: [Object],
    numberFormat: [Object],
    abi: [Object],
    network: [Function: network],
    networks: [Function: networks],
    address: [Object],
    transactionHash: [Object],
    links: [Function: links],
    events: [Function: events],
    binary: [Function: binary],
    deployedBinary: [Function: deployedBinary],
    unlinked_binary: [Object],
    bytecode: [Object],
    deployedBytecode: [Object],
    sourceMap: [Object],
    deployedSourceMap: [Object],
    source: [Object],
    sourcePath: [Object],
    legacyAST: [Object],
    ast: [Object],
    compiler: [Object],
    schema_version: [Function: schema_version],
    schemaVersion: [Function: schemaVersion],
    updated_at: [Function: updated_at],
    updatedAt: [Function: updatedAt],
    userdoc: [Function: userdoc],
    devdoc: [Function: devdoc] },
    _property_values: {},
    _json:
    { contractName: ‘HelloWorld’,
    abi: [Array],
    bytecode: ‘0x608060405234801561001057600080fd5b5061013f806100206000396000f3fe608060405260043610610041576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063f8a8fd6d14610046575b600080fd5b34801561005257600080fd5b5061005b6100d6565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561009b578082015181840152602081019050610080565b50505050905090810190601f1680156100c85780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b60606040805190810160405280600a81526020017f48656c6c6f576f726c640000000000000000000000000000000000000000000081525090509056fea165627a7a72305820903d53a33c88326dd2f332c3a2be2ef8db8c54ce836e7652e83aaf0970f941170029’,
    deployedBytecode: ‘0x608060405260043610610041576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063f8a8fd6d14610046575b600080fd5b34801561005257600080fd5b5061005b6100d6565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561009b578082015181840152602081019050610080565b50505050905090810190601f1680156100c85780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b60606040805190810160405280600a81526020017f48656c6c6f576f726c640000000000000000000000000000000000000000000081525090509056fea165627a7a72305820903d53a33c88326dd2f332c3a2be2ef8db8c54ce836e7652e83aaf0970f941170029’,
    sourceMap: ‘28:114:0:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;28:114:0;;;;;;;’,
    deployedSourceMap: ‘28:114:0:-;;;;;;;;;;;;;;;;;;;;;;;;55:84;;8:9:-1;5:2;;;30:1;27;20:12;5:2;55:84:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;55:84:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;92:13;114:19;;;;;;;;;;;;;;;;;;;;55:84;::?’,
    source: ‘pragma solidity ^ 0.5.0;\r\n\r\ncontract HelloWorld {\r\n\r\n function test() pure public returns (string memory) {\r\n return ‘HelloWorld’;\r\n }\r\n}\r\n’,
    sourcePath: ‘D:/Desktop/Code/Truffle/demo1/contracts/HelloWorld.sol’,
    ast: [Object],
    legacyAST: [Object],
    compiler: [Object],
    networks: [Object],
    schemaVersion: ‘3.0.1’,
    updatedAt: ‘2019-03-08T14:20:37.002Z’,
    devdoc: [Object],
    userdoc: [Object] },
    setProvider: [Function: bound setProvider],
    new: { [Function: bound new] estimateGas: [Function: bound estimateDeployment] },
    at: [Function: bound at],
    deployed: [Function: bound deployed],
    defaults: [Function: bound defaults],
    hasNetwork: [Function: bound hasNetwork],
    isDeployed: [Function: bound isDeployed],
    detectNetwork: [Function: bound detectNetwork],
    setNetwork: [Function: bound setNetwork],
    setWallet: [Function: bound setWallet],
    resetAddress: [Function: bound resetAddress],
    link: [Function: bound link],
    clone: [Function: bound clone],
    addProp: [Function: bound addProp],
    toJSON: [Function: bound toJSON],
    decodeLogs: [Function: bound decodeLogs],
    web3:
    Web3 {
    currentProvider: [Getter/Setter],
    _requestManager: [Object],
    givenProvider: null,
    providers: [Object],
    _provider: [Object],
    setProvider: [Function],
    BatchRequest: [Function: bound Batch],
    extend: [Object],
    version: ‘1.0.0-beta.37’,
    utils: [Object],
    eth: [Object],
    shh: [Object],
    bzz: [Object] },
    class_defaults:
    { from: ‘0x9A37E2b824bB3FBd4429D0CEb2c7ef3471cb0fE3’,
    gas: 6721975,
    gasPrice: 20000000000 },
    currentProvider:
    HttpProvider {
    host: ‘http://127.0.0.1:9545/’,
    httpAgent: [Object],
    timeout: 0,
    headers: undefined,
    connected: true,
    send: [Function],
    _alreadyWrapped: true },
    network_id: ‘4447’ },
    methods:
    { ‘test()’:
    { [Function]
    call: [Function],
    sendTransaction: [Function],
    estimateGas: [Function],
    request: [Function] } },
    abi:
    [ { constant: true,
    inputs: [],
    name: ‘test’,
    outputs: [Array],
    payable: false,
    stateMutability: ‘pure’,
    type: ‘function’,
    signature: ‘0xf8a8fd6d’ } ],
    address: ‘0x487B6C076809d7Db11C9B5fF75A4289f1A739914’,
    transactionHash: undefined,
    contract:
    Contract {
    currentProvider: [Getter/Setter],
    _requestManager: RequestManager { provider: [Object], providers: [Object], subscriptions: {} },
    givenProvider: null,
    providers:
    { WebsocketProvider: [Function: WebsocketProvider],
    HttpProvider: [Function: HttpProvider],
    IpcProvider: [Function: IpcProvider] },
    _provider:
    HttpProvider {
    host: ‘http://127.0.0.1:9545/’,
    httpAgent: [Object],
    timeout: 0,
    headers: undefined,
    connected: true,
    send: [Function],
    _alreadyWrapped: true },
    setProvider: [Function],
    BatchRequest: [Function: bound Batch],
    extend:
    { [Function: ex]
    formatters: [Object],
    utils: [Object],
    Method: [Function: Method] },
    clearSubscriptions: [Function],
    options: { address: [Getter/Setter], jsonInterface: [Getter/Setter] },
    defaultAccount: [Getter/Setter],
    defaultBlock: [Getter/Setter],
    methods:
    { test: [Function: bound _createTxObject],
    ‘0xf8a8fd6d’: [Function: bound _createTxObject],
    ‘test()’: [Function: bound _createTxObject] },
    events: { allEvents: [Function: bound ] },
    _address: ‘0x487B6C076809d7Db11C9B5fF75A4289f1A739914’,
    _jsonInterface: [ [Object] ] },
    test:
    { [Function]
    call: [Function],
    sendTransaction: [Function],
    estimateGas: [Function],
    request: [Function] },
    sendTransaction: [Function],
    send: [Function],
    allEvents: [Function],
    getPastEvents: [Function] }

    合约实例调用,我们在HelloWorld.sol文件中定义了一个test函数,接下来就调用它:

    truffle(develop)> helloWorld.test()
    ‘HelloWorld’

    至此,我们的智能合约就已经初步上链并可以调用了。

    小结

    通过简单的HelloWorld.sol文件的编写、编译、部署、调用来初步学习了truffle框架的使用,而truffle作为框架,还包括了前端界面的使用,接下来,我将编写truffle框架包含前端界面的使用。

    展开全文
  • 搭建truffle框架

    2021-11-10 10:32:42
    安装 Node.js nodejs安装,安装过程勾选安装tools node -v检查 npm -v检查 ganache ...npm install -g truffle ...truffle ...npm install -g truffle ...truffle-config.js / truffle.js:配置文件。前者是wi

    1 安装

    • Node.js
      • nodejs安装,安装过程勾选安装tools
      • node -v检查
      • npm -v检查
    • ganache
      • npm install -g truffle
    • truffle
      • npm install -g truffle

    2 开始第一个demo

    2.1 初始化

    1. 新建目录
    2. 进入目录输入命令:truffle init
    3. 生成四个文件
      • contracts:存放合约
        • migrations.sol 所有项目必须有
      • migrations:存放部署脚本
      • test:测试文件
      • truffle-config.js / truffle.js:配置文件。前者是windows平台使用,使用时需要删除后者;后者是linux和mac,使用不需要删除前者

    2.2 编写合约

    • 在contracts文件夹内写一个sol文件

    2.3 编译合约

    • 执行truffle compile
      • 把solidity文件编译成字节码(以太坊虚拟机能理解的代码)
      • 编译完成后生成build文件夹,包含一个和sol同名的json文件
      • json文件内容:
        • 编译器版本
          在这里插入图片描述
        • abi,bytecode等合约的相关信息

    2.4 部署合约

    • 三种环境:ganache图形化界面、ganache-cli命令行、真实网络环境
    • 步骤
      1. 启动环境
      2. 添加部署脚本
      3. 修改配置文件truffle-config.js

    2.5 与前端交互

    1. npm init:根目录下,先转换为npm项目,完成后出现package.json
    2. npm install truffle-contract:安装truffle框架提供的contract,方便与合约进行交互
    3. 将包中的truffle-contract.js复制到 src/js 文件夹下

    2 Ubuntu 20.04

    • 安装nodejs和npm:sudo apt install nodejs npm
      • 验证:
        • nodejs -v
        • npm -v
    • 切换root用户
      • sudo passwd root:设置root密码
      • su root
    • 安装truffle框架:sudo npm install -g truffle
      • 验证:truffle
    • 新建空文件夹:truffle init
    • truffle develop
    • 写好sol文件后编译:compile
    • 部署:migrate
    • 另开一个命令行
      • 安装git:sudo apt install git
      • 安装truffle-contract:sudo npm install truffle-contract
      • web3.min.js 和 truffle-contract.js 都在 node_modules的子文件夹内
      • 安装项目服务器:sudo npm install -g lite-server

    总文件
    truffle develop

    compile
    migrate

    找到package.json文件
    npm install
    sudo apt install git``
    sudo npm install truffle-contract
    npm run dev

    用ganache需要修改truffle-config.js

    solc和solidity版本要匹配

    展开全文
  • 简单介绍truffle框架

    千次阅读 2019-05-20 10:07:06
    Truffle是基于Solidity语言的一套开发框架,它简化了去中心化应用(Dapp)的构建和管理流程。本身是采用Javascript编写,支持智能合约的编译、部署和测试。 truffle开发框架提供了很多功能,简化了我们的开发、编译...

    链客,专为开发者而生,有问必答!

    此文章来自链客区块链技术问答社区,未经允许拒绝转载。

    在这里插入图片描述

    Truffle是基于Solidity语言的一套开发框架,它简化了去中心化应用(Dapp)的构建和管理流程。本身是采用Javascript编写,支持智能合约的编译、部署和测试。

    truffle开发框架提供了很多功能,简化了我们的开发、编译、部署与调试过程:

    • 内置了智能合约编译、链接、部署和二进制文件的管理

    • 方便快速开发的合约自动化测试

    • 方便扩展的、脚本化的部署与发布框架

    • 方便的网络管理功能。不论是公有网络还是私有网络

    • 基于erc190标准,使用EthPM & NPM进行依赖包管理

    • 内置控制台功能。项目构建后,可以直接在命令行调用输出结果,方便了开发调试

    • 可配的构建流程,支持持续集成。

    • 支持外部脚本的执行

    接下来,我们将通过truffle框架来构建 Hello 合约的编译、部署过程。truffle安装,npm install -g truffle

    安装好后,查看一下版本信息:

    truffle version

    本篇示例基于如下版本:

    Truffle v4.0.1 (core: 4.0.1)

    Solidity v0.4.18 (solc-js)

    初始化项目

    truffle提供了很多项目模板,可以快速搭建一个去中心化应用的代码骨架。我们使用 webpack 项目模板来构建 Hello 合约。在 smartcontract 目录下,执行如下命令:

    truffle unbox webpack

    1

    初始化项目的时候,它会创建运行一个完整Dapp所需的文件和目录。我们将 strings.sol 和 Hello.sol两个合约文件移动到 contracts 目录下,并删除 contracts 目录下原有的 ConvertLib.sol 和 MetaCoin.sol 文件(Migrations.sol 合约用来管理应用合约的部署,因此请勿删除)。目录结构如下:

    smartcontract

    ├── app

    ├── contracts

    ├── Hello.sol

    ├── Migrations.sol

    └── strings.sol

    ├── migrations

    ├── 1_initial_migration.js

    └── 2_deploy_contracts.js

    ├── node_modules

    ├── package.json

    ├── test

    ├── truffle.js

    └── webpack.config.js

    修改部署脚本

    目录migrations (迁移的意思) 非常重要。truffle使用该目录下的脚本来管理合约的部署。在前面几篇教程中,我们是通过自己编写编译部署脚本 deploy.js ,并在node控制台中运行来将 Hello 合约部署到区块链上的。有了truffle,以后再也不用这么做了。

    第一个脚本 1_initial_migration.js 的作用是向区块链部署 Migrations 合约。 这个合约的作用是存储并跟踪已经部署的最新合约。每次运行脚本时,truffle就会向区块链查询获取已部署好的合约,然后部署新的合约。部署完成后,这个脚本会更新 Migrations 合约中的last_completed_migration 字段指向最新部署的合约。

    我们可以简单地把 Migrations 合约当成是一个数据库表,字段last_completed_migration 总是保持最新状态。

    我们来修改第二个脚本 2_deploy_contracts.js :

    //artifacts对象为truffle框架提供//artifacts.require()方法与Node中的require()方法类似//编译合约代码。自动调用solc编译器来编译合约代码并返回编译结果对象var stringsContract = artifacts.require(“./strings.sol“);var HelloContract = artifacts.require(“./Hello.sol“);

    //部署器对象deployer为truffle框架提供

    module.exports = function(deployer) {

    //部署string.sol合约

    deployer.deploy(stringsContract);

    //将已部署的strings合约类库连接到Hello合约

    deployer.link(stringsContract, HelloContract);

    //部署Hello.sol合约

    deployer.deploy(HelloContract);

    };

    代码不难,加上了注释很容易理解。

    修改truffle配置

    部署脚本修改完后,我们还需要在配置文件中声明要连接的以太坊节点地址,这里使用Ganache的地址 http://localhost:7545

    require(‘babel-register‘)

    module.exports = {

    networks: {

    development: {

    host: ‘localhost‘,

    port: 7545,

    network_id: ‘*‘

    }

    }

    }

    注意 development 关键字。truffle支持将合约部署到多个区块链网络,例如开发网络、私有网络、测试网或公网。 在上面的配置中,我们只定义了一个用于开发的网络。

    编译合约

    在 smartcontract 目录下执行 truffle compile 命令,终端输出如下:

    Compiling ./contracts/Hello.sol…

    Compiling ./contracts/Migrations.sol…

    Compiling ./contracts/strings.sol…

    Writing artifacts to ./build/contracts

    可以看到,contracts 目录下的三个合约文件都编译了,并且在当前目录下生成了 build/contracts目录,同时也产生了三个文件:

    smartcontract/build/contracts

    ├── Hello.json

    ├── Migrations.json

    └── strings.json

    部署合约

    合约编译成功后,就可以部署了。在 smartcontract 目录下执行部署命令 truffle migrate ,可以看到终端上输出了部署日志:

    关键信息可以标注出来。我们也可以在 Ganache 中的 LOGS 面板中查看 transaction id 和 合约地址:

    合约调用

    合约部署成功后,我们可以通过 truffle console 命令进入控制台。在控制台里调用刚才部署的合约:

    $ truffle console

    truffle(development)> Hello.deployed().then(function(contractInstance){contractInstance.say.call(‘Guys‘).then(function(result){console.log(result)})})

    truffle(development)> Hello Guys

    需要注意的是,truffle 的所有调用都会返回 promise (node语法),所以每个响应都被包裹在 then() 函数里。

    至此,通过truffle框架进行合约的编译、部署与调用就介绍完了。和之前手动编写编译部署脚本,及调用脚本的方式相比,是不是更方便快捷?而且代码量还更少更精炼。 通过truffle框架,编译和部署都用一条命令即可搞定。

    展开全文
  • truffle框架的学习

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

    简介

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

    Truffle有以下功能:

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

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

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

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

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

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

    •  可配的构建流程,支持紧密集成。  在Truffle环境里支持执行外部的脚本。

    环境安装

    选择全局安装: npm install -g truffle@4.1.14,我下载的是4.1.14版本。

    安装完之后给上面的路径添加软连接 ln -s /usr/local/node/node-v10.15.0-linux-x64/bin/truffle /usr/local/bin/truffle

    出现上面的提示就说明安装成功了。

    安装webpack: npm install -g webpack

    f

    使用

    初始化方式

    初始化的方式有两种:

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

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

    创建一个空目录,在下面创建truffle 项目:

    mkdir simple_voting_by_truffle_dapp 
    cd simple_voting_by_truffle_dapp
    npm install -g webpack
    truffle unbox webpack

    truffle unbox webpack命令就是指下载webpack这个项目来用(初始化)

    遇到的问题

    truffle初始化的坑有很多:

    1. truffle init报错

    truffle init报错:Error: Truffle Box at URL https://github.com/truffle-box/bare-box.git doesn’t exist. If you believe this is an error, please contact Truffle support.

    解决方法:git clone https://github.com/truffle-box/bare-box然后进入bare-box:cd bare-box

    可以看到我们需要的初始化的内容已经都在里面了。继续working。

    2. truffle unbox报错

    truffle unbox webpack初始化时:Truffle Box at URL https://github.com/truffle-box/webpack-box doesn’t exist.

    或者:

    解决方法:同样的,使用另一种方法来unbox这个项目

    git clone https://github.com/trufflesuite/truffle-init-webpack.git

    $ cd truffle-init-webpack

    就一样啦。

    测试环境

    truffle官方推荐使用两种测试客户端:

    • ganache
    • truffle develop

    其实两者都差不多,都是进行简单临时测试的。

    Ganache是奶油巧克力的意思,而Truffle是松露巧克力,一般是以Ganache为核,然后上面撒上可可粉,所以这两个产品的名字还是很贴切的。

    进入初始化的目录中,启动truffle develop:

    truffle v4.1.14版本内嵌的web3是0.20.6版本的,所以使用truffle还是要使用1.0版本以下的web3js语法。

    webpack的目录结构

    app/ - 你的应用文件运行的默认目录。这里面包括推荐的javascript文件和css样式文件目录,但你可以完全决定如何使用这些目录。

    contract/ - Truffle默认的合约文件存放目录。

    migrations/ - 部署脚本文件的存放目录

    test/ - 用来测试应用和合约的测试文件目录

    truffle.js - Truffle的配置文件

    操作

    truffle的常用操作:

    启动控制台

    不想启动内置的ganache控制台可以将文件truffle.js改成如下:

    // Allows us to use ES6 in our migrations and tests.
    require('babel-register')

    module.exports = {
    networks: {
    development: {
    host: 'localhost',
    port: 8545,
    network_id: '*' // Match any network id
    }
    }
    }

    主要就是改成development

    启动控制台:truffle console

    遇到的坑:

    windows下直接使用此命令(前面+node)是不行的,貌似是因为版本更新。。。会报一下错误:

    解决cnpm install babel-register

    然后在项目上使用git bash输入truffle console命令启动。

    奇迹:

    编译

    编译contracts文件夹下的所有智能合约:truffle compile

    部署

    迁移其实就是部署。

    truffle migrate

    truffle 部署的好处在于:它会检测是否修改了合约,如果合约内容没有变化,那么部署成功后以后都不会去重复部署了。

    控制台使用合约

    truffle包装了web3麻烦的根据abi和字节码部署一系列复杂的操作,在其控制台,对于已经部署的合约可以使用其特殊语法创建实例。(部署完合约之后,truffle就会帮我们记住合约的abi和地址,我们可以直接创建实例)

    例子:

    创建合约实例给Alice投票。

    Voting.deployed().then(function(votingInstance){votingInstance.vote('Alice').then(function(v){console.log(v)})});

    异步运行,一开始运行提示undefind,需要手动挖矿后显示收据:

    查询Alice的票数

    Voting.deployed().then(function(votingInstance){votingInstance.totalVotesFor('Alice').then(function(v){console.log(v.toString())})})

    部署页面

    npm run dev

    其实就是运行webpack-dev-server,webpack封装的一个服务器(nodejs)

    如果这里报错的话,例如:

    那么很有可能启动需要的依赖包没有安装,安装的方式是在项目文件夹下:

    npm install

    那么就会把package.json文件中要依赖的所有的包都安装上了:

    再次启动npm run dev

    监听端口8080,可以在浏览器中打开了。

    `
    本文作者: DDDemons hide 发布时间: 2020-08-23 最后更新: 2020-09-03 本文标题: truffle框架的学习 本文链接: https://xwjahahahaha.github.io/2020/08/23/技术贴/区块链/truffle框架的学习/ 版权声明: 本作品采用 CC BY-NC-SA 4.0 许可协议进行许可。转载请注明出处!
    知识共享许可协议

    -------------本文结束 感谢您的阅读-------------
    展开全文
  • Truffle框架的MythX安全分析插件 该插件将自动智能合约安全性分析添加到。 它基于 (以太坊智能合约的安全分析API)。 该插件与Truffle 5.0或更高版本兼容。 安装插件 要从NPM安装最新的稳定版本: $ npm install -...
  • 以太坊turffle框架初始化的demo实例,需要相关环境才能运行,可以参考我的博客,想学习dapp开发的同学可以看看
  • truffle框架

    2018-11-27 09:40:10
    truffle compile --network ganacheNet 编译命令,–network指定网络 linux是在truffle.js里面进行指定ganacheNet网络名称。
  • 以太坊Truffle框架构建Dapp

    千次阅读 2018-03-10 23:00:15
    1.安装环境通过node安装truffle,推荐在ubuntu 14.04下进行开发,window下可能会遇到各种问题。$ npm install -g truffle 我的node版本是npm版本是下载之后输入$ truffle -v 我的版本是:2.开始构建项目首先准备一...
  • 使用truffle框架部署并测试以太坊智能合约 文章目录使用truffle框架部署并测试以太坊智能合约安装solidity编译器Mac下安装安装 nodeMac下安装安装 truffleMac下安装安装 ganache使用truffle官方示例合约进行测试1. ...
  • Truffle 框架安装与使用

    千次阅读 2018-07-02 21:53:46
    Truffle 最受欢迎的以太坊开发框架。 http://truffleframework.com Truffle是以太坊的开发环境,测试框架和资产管道,旨在让以太坊开发者的生活更轻松。 用Truffle,你会得到: ...
  • Truffle框架的初使用

    2019-11-12 20:46:44
    truffle使用 1、下载 1.1、nodejs 1.2、truffle 2、新建truffle项目 2.1、创建简单项目 2.2、编译合约文件 2.2.1、开启truffle框架私有链 2.2.2、编译合约文件 2.2.3、部署合约上链 2.2.4、获取合约实例 小结...
  • truffle框架带有前端的使用

    千次阅读 2019-03-10 23:36:23
    truffle框架与前端1、新建项目2、编译智能合约3、打开前端界面小结 truffle框架官网提供了很多前端框架,这里我以react为例。 1、新建项目 新建一个项目,叫做demo3,在demo3根目录下,打开cmd,输入以下命令(初次...
  • Truffle安装 本教程的要求是你要知道它是什么以及如何使用命令行工具,并且你要稍微熟悉 NPM,可查看官网文档。 Truffle 打开命令行窗口,并输入: npm install -g truffle 如果出现错误,建议你多阅读有关 ...
  • Truffle框架的使用

    千次阅读 2017-07-21 12:26:20
    环境版本如下 mac环境:输入truffle了 version 检查truffle环境,本文为v3.4.5 : 1. 新建一个demo根目录,在命令行中进入这个目录,输入truffle init webpack(创建一个web应用),而truffle init命令现在则不会...
  • PetShopTestWorkshop 以Truffle框架进行以太坊测试 要求 您需要安装 。 安装 对于安装,您可以git clone repo并全局安装松露 npm install -g truffle 或从头开始创建一个新项目,然后按照本的说明进行操作
  • 利用truffle框架部署智能合约

    千次阅读 2018-03-01 22:56:27
    2、安装truffle框架和testrpc测试环境:npm install -g ethereumjs-testrpc truffle,如果进度卡住,那么一般就是网络原因(墙),需要安装cnpm:npm install cnpm -g --registry=https://reg...
  • 设置Dapp开发环境和使用以Solidity编写的松露框架的教程。 通过npm安装Truffle npm install -g truffle 编译示例智能合约truffle compile 部署示例智能合约truffle migrate 测试智能合约truffle test 启动本地...
  • 以太坊是区块链开发领域最好的编程平台,而truffle是以太坊(Ethereum)最受欢迎的一个开发框架 系统环境 windows 10 node.js v10.15.0 npm v6.7.0 安装truffle与客户端 npm install -g truffle npm需要node.js的...
  • Truffle - 是以太坊的开发环境,测试框架和资产管道,旨在解放太坊开发人员。
  • 以太坊投票Dapp 使用Truffle框架的简单以太坊投票dapp 用法 以下博客文章详细解释了每一章: 第1章: : 第2章: : 第3章: : 第4章: :
  • 以太坊入门-Truffle框架搭建

    千次阅读 2018-09-13 11:06:59
    一、安装Node.js ... 安装后在windows命令cmd窗口,输入node -v,能显示node...truffle是本地的用来编译、部署智能合约的工具。 在windows命令行窗口输入npm -g install truffle。 没有报错信息就是成功第二步 三...
  • 该项目的目标是为Truffle语言实现者构建可重用组件的集合。 理想情况下,这些组件在某种程度上保持彼此独立,并且独立于特定的语言语义。 但是,由于它们的开发方式,对具有简单,统一和一致语义的语言存在一定的...
  •  - is properly configured in your Truffle configuration file (truffle.js) 3.4 验收测试智能合约 1)参考宠物商店的文章代码 , 在一个窗口启动一个ganache-cli 钱包 。 duncanwang@ubuntu:~/work/name-...
  • truffle是以太坊最受欢迎的一个开发框架,安装以太坊框架truffle的需要依赖nodejs中的npm命令,因此需要先安装node.js环境以及npm。Node.js 就是运行在服务端的 JavaScript;可以看看 nodejs教程 这里需要注意:安装...
  • ZipPy是使用框架构建的快速,轻量级的实现。 ZipPy利用底层的Java JIT编译器,并在运行时将Python程序编译为高度优化的机器代码。 比比当前维护在。 简短说明(使用标准JDK): 先决条件: 安装最新的 获得ZipPy...
  • truffle是一个智能合约的开发框架,具体的就不介绍了,我们主要是说说怎么使用这个框架来进行智能合约的开发,官网戳这里。 安装 创建项目 编译合约 部署 部署到geth 部署到truffle的内建测试网络 部署...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,331
精华内容 932
关键字:

truffle框架