• J
    jimi2018

    收费实战教程:

    python以太坊,主要是针对python程序员围绕web3.py库进行区块链以太坊开发的讲解:
    http://xc.hubwiz.com/course/5b40462cc02e6b6a59171de4?affid=827v2mm

    web3j,主要是针对java和android程序员围绕web3j库进行区块链以太坊开发的讲解:
    http://xc.hubwiz.com/course/5b2b6e82c02e6b6a59171de2?affid=827v2mm

    php以太坊,主要是介绍使用php进行智能合约开发交互,进行账号创建、交易、转账、代币开发以及过滤器和事件等内容:

    http://xc.hubwiz.com/course/5b36629bc02e6b6a59171de3?affid=827v2mm

    C#以太坊,主要讲解如何使用C#开发基于.Net的以太坊应用,包括账户管理、状态与交易、智能合约开发与交互、过滤器和事件等:
    http://xc.hubwiz.com/course/5b6048c3c02e6b6a59171dee?affid=827v2mm

    以太坊开发,主要是介绍使用node.js、mongodb、区块链、ipfs实现去中心化电商DApp实战,适合进阶:
    http://xc.hubwiz.com/course/5abbb7acc02e6b6a59171dd6?affid=827v2mm

    以太坊教程,主要介绍智能合约与dapp应用开发,适合入门:
    http://xc.hubwiz.com/course/5a952991adb3847553d205d1?affid=827v2mm

    EOS智能合约与DApp开发入门:
    http://xc.hubwiz.com/course/5b52c0a2c02e6b6a59171ded?affid=827v2mm

    收集整理了一些免费区块链、以太坊技术开发相关的文件,有需要的可以下载,文件链接:

    1. web3.js API官方文档中文版:https://pan.baidu.com/s/1hOV9hEzi7hFxJCL4LTvC6g
    2. 以太坊官方文档中文版 :https://pan.baidu.com/s/1ktODJKLMBmkOsi8MPrpIJA
    3. 以太坊白皮书中文版 :https://pan.baidu.com/s/1bzAFnzJ35hlQxJ2J4Oj-Ow
    4. Solidity的官方文档中文版 :https://pan.baidu.com/s/18yp9XjEqAHpiFm2ZSCygHw
    5. Truffle的官方文档中文版 :https://pan.baidu.com/s/1y6SVd7lSLUHK21YF5FzIUQ
    6. C#区块链编程指南 :https://pan.baidu.com/s/1sJPLqp1eQqkG7jmxqwn3EA
    7. 区块链技术指南: :https://pan.baidu.com/s/13cJxAa80I6iMCczA04CZhg
    8. 精通比特币中文版: :https://pan.baidu.com/s/1lz6te3wcQuNJm28rFvBfxg
    9. Node.js区块链开发 :https://pan.baidu.com/s/1Ldpn0DvJ5LgLqwix6eWgyg
    10. geth使用指南文档中文版 :https://pan.baidu.com/s/1M0WxhmumF_fRqzt_cegnag
    11. 以太坊DApp开发环境搭建-Ubuntu : https://pan.baidu.com/s/10qL4q-uKooMehv9X2R1qSA
    12. 以太坊DApp开发环境搭建-windows :https://pan.baidu.com/s/1cyYkhIJIFuI2oyxM9Ut0eA
    13. 以太坊DApp开发私链搭建-Ubuntu : https://pan.baidu.com/s/1aBOFZT2bCjD2o0EILBWs-g
    14. 以太坊DApp开发私链搭建-windows :https://pan.baidu.com/s/10Y6F1cqUltZNN99aJv9kAA
    15. 以太坊ganache CLI命令行参数详解:https://pan.baidu.com/s/1lnknFkwenacaeM4asOcBdg
    16. 使用truflle和infura部署以太坊合约:https://pan.baidu.com/s/1PTxSVff2vHSVUihYczRRqw
    17. IPFS安装部署与开发环境搭建-windows:https://pan.baidu.com/s/1bnhDvqCoOgAqEBZXMtVbRg

    发布在 编程 阅读更多
  • J
    jimi2018

    推荐一个C#开发以太坊区块链的教程:

    .net c#以太坊开发
    本课程详细讲解如何使用C#开发基于.Net的以太坊应用,课程内容即涉及以太坊中的核心概念,例如账户管理、状态与交易、智能合约开发与交互、过滤器和事件等,同时也详细说明如何使用C#与以太坊进行交互,是C#工程师学习以太坊应用开发的不二选择。

    发布在 编程 阅读更多
  • J
    jimi2018

    EOS智能合约与DApp开发入门:

    EOS教程

    本课程帮助你快速入门EOS区块链去中心化应用的开发,内容涵盖EOS工具链、账户与钱包、发行代币、智能合约开发与部署、使用代码与智能合约交互等核心知识点,最后综合运用各知识点完成一个便签DApp的开发。

    发布在 编程 阅读更多
  • J
    jimi2018

    web3.php是一个PHP接口,主要用于与以太坊区块链及其生态系统进行交互.

    安装

    通过Composer来管理依赖关系,首先将minimum-stability设置为dev

    "minimum-stability": "dev"
    

    然后执行:

    composer require sc0vu/web3.php dev-master
    

    或者你可以在composer.json中添加这行。

    <!--more-->

    "sc0vu/web3.php": "dev-master"
    

    用法

    实例

    use Web3\Web3;
    
    $web3 = new Web3('http://localhost:8545');
    

    接口调用

    use Web3\Web3;
    use Web3\Providers\HttpProvider;
    use Web3\RequestManagers\HttpRequestManager;
    
    $web3 = new Web3(new HttpProvider(new HttpRequestManager('http://localhost:8545')));
    
    // timeout
    $web3 = new Web3(new HttpProvider(new HttpRequestManager('http://localhost:8545', 0.1)));
    

    使用回调函数调用rpc

    $web3->clientVersion(function ($err, $version) {
        if ($err !== null) {
            // do something
            return;
        }
        if (isset($client)) {
            echo 'Client version: ' . $version;
        }
    });
    

    eth

    use Web3\Web3;
    
    $web3 = new Web3('http://localhost:8545');
    $eth = $web3->eth;
    

    这样也行:

    use Web3\Eth;
    
    $eth = new Eth('http://localhost:8545');
    

    net

    use Web3\Web3;
    
    $web3 = new Web3('http://localhost:8545');
    $net = $web3->net;
    

    或者

    use Web3\Net;
    
    $net = new Net('http://localhost:8545');
    

    batch

    web3

    $web3->batch(true);
    $web3->clientVersion();
    $web3->hash('0x1234');
    $web3->execute(function ($err, $data) {
        if ($err !== null) {
            // do something
            // it may throw exception or array of exception depends on error type
            // connection error: throw exception
            // json rpc error: array of exception
            return;
        }
        // do something
    });
    

    eth

    $eth->batch(true);
    $eth->protocolVersion();
    $eth->syncing();
    
    $eth->provider->execute(function ($err, $data) {
        if ($err !== null) {
            // do something
            return;
        }
        // do something
    });
    

    net

    $net->batch(true);
    $net->version();
    $net->listening();
    
    $net->provider->execute(function ($err, $data) {
        if ($err !== null) {
            // do something
            return;
        }
        // do something
    });
    

    personal

    $personal->batch(true);
    $personal->listAccounts();
    $personal->newAccount('123456');
    
    $personal->provider->execute(function ($err, $data) {
        if ($err !== null) {
            // do something
            return;
        }
        // do something
    });
    

    智能合约Contract

    use Web3\Contract;
    
    $contract = new Contract('http://localhost:8545', $abi);
    
    // deploy contract
    $contract->bytecode($bytecode)->new($params, $callback);
    
    // call contract function
    $contract->at($contractAddress)->call($functionName, $params, $callback);
    
    // change function state
    $contract->at($contractAddress)->send($functionName, $params, $callback);
    
    // estimate deploy contract gas
    $contract->bytecode($bytecode)->estimateGas($params, $callback);
    
    // estimate function gas
    $contract->at($contractAddress)->estimateGas($functionName, $params, $callback);
    
    // get constructor data
    $constructorData = $contract->bytecode($bytecode)->getData($params);
    
    // get function data
    $functionData = $contract->at($contractAddress)->getData($functionName, $params);
    

    将值分配给外部域(从回调域到域外)

    由于和JavaScript回调不同,如果需要将值赋值到域外,我们需要给回调赋值。
    
    $newAccount = '';
    
    $web3->personal->newAccount('123456', function ($err, $account) use (&$newAccount) {
        if ($err !== null) {
            echo 'Error: ' . $err->getMessage();
            return;
        }
        $newAccount = $account;
        echo 'New account: ' . $account . PHP_EOL;
    });
    
    

    为了解决php程序员学习以太坊的需求,我们提供很受欢迎的互动教程:
    php以太坊,主要是介绍使用php进行智能合约开发交互,进行账号创建、交易、转账、代币开发以及过滤器和事件等内容。

    发布在 编程 阅读更多
  • J
    jimi2018

    web3j是一个轻量级、高度模块化、响应式、类型安全的Java和Android类库提供丰富API,用于处理以太坊智能合约及与以太坊网络上的客户端(节点)进行集成。

    可以通过它进行以太坊区块链的开发,而无需为你的应用平台编写集成代码。

    本文是对web3j官网的完整翻译,大家可以参考。

    阅读全文 »

    当然如果希望有一个快速入门的web3j内容,并且最好是边练习实例边学习的实操教程的话。

    我们有一个web3j课程可以满足需要,专门详细的讲解区块链、以太坊、web3j。

    发布在 编程 阅读更多
  • J
    jimi2018

    在前面的一些文章中,我们学习了以太坊智能合约编程的基础知识。现在我们来建立一个实战以太坊dapp案例:彩票。

    我们彩票案例的目的是多个玩家能够通过发送钱参与彩票。玩家发送的钱越多,他赢得所有资金的机会就越大。当彩票的运营发行者决定关闭彩票后,就会选择一个优胜者,并将全部资金转给这名优胜者。

    为了存储每个玩家的彩金,我们将看到一个新的数据类型,这就是mappingmappingkey绑定到一个值。声明必须同时指定key的类型和值。例如,这里我们将存储属于某个地址的钱:

    mapping(address => uint) usersBet;
     
    usersBet[msg.sender] = 10;
     
    // usersBet[msg.sender] == 10
    

    不爽的是如果索引不是线性的,即使我们知道记录的数量,也无法迭代mapping的值。因此,为了迭代我们的彩金,我们需要单独地存储玩家的数量和玩家在另一个映射中的地址列表。

    所以我们将存储3个变量包括彩票运营发行者的地址:

    mapping(address => uint) usersBet;
    mapping(uint => address) users;
    uint nbUsers = 0;
    uint totalBets = 0;
     
    address owner;
    

    我们然后构建一个Bet函数。正常账户一样,智能合约可以操控以太坊。我们Bet函数需要有一个支付彩金的功能。当函数被调用的时候他就将投入的彩金值发送给以太坊智能合约,并将发送以太币的数量存储在msg.value

    所以当函数被调用时,我们先检查发送的以太币值是否大于零即msg.value>0。然后我们将发送值存储在usersBet的映射中。如果这个玩家的彩金等于0,我们递增我们的nbUsers并存储玩家的地址,这样我们可以在关闭这一期彩票时遍历所有玩家。。

    function Bet() public payable  {
        if (msg.value > 0) {
           if (usersBet[msg.sender] == 0) { // Is it a new player
              users[nbUsers] = msg.sender;
              nbUsers += 1;
           }
         usersBet[msg.sender] += msg.value;
         totalBets += msg.value;
        }
    }
    

    我们的彩票dapp的最后一部分是挑选优胜者。我们的函数EndLottery()只能由彩票的所有者访问。为了简化程序,我们将选择一个随机数在0与玩家数量之间。然后,我们将进行迭代筛选,并检查谁赢了。当玩家被发现时,我们会简单地将智能合约作为确认优胜者的一个主要依据。他将得到合约中所有的钱。

    function EndLottery() public {
        if (msg.sender == owner) {
            uint sum = 0; 
            uint winningNumber = uint(block.blockhash(block.number-1)) % totalBets;
            for (uint i=0; i < nbUsers; i++) {
               sum += usersBet[users[i]]; 
               if (sum >= winningNumber) {
                   selfdestruct(users[i]);
                   return;
               }
            }
        }
    }
    

    一个特别的说明,我们在这个示例中使用了一个非常简单的方法来获取或取值,现实中特别是在处理钱的时候,你需要用一个更好的方法来获得真正的随机数。

    下面所有的智能合约代码放在一起:

    pragma solidity ^0.4.11;
     
    contract Lottery {
     
        mapping(address => uint) usersBet;
        mapping(uint => address) users;
        uint nbUsers = 0;
        uint totalBets = 0;
     
        address owner;
     
        function Lottery() {
            owner = msg.sender;
        }
        
        function Bet() public payable  {
            if (msg.value > 0) {
                if (usersBet[msg.sender] == 0) {
                    users[nbUsers] = msg.sender;
                    nbUsers += 1;
                }
                usersBet[msg.sender] += msg.value;
                totalBets += msg.value;
            }
        }
        
        function EndLottery() public {
            if (msg.sender == owner) {
                uint sum = 0;
                uint winningNumber = uint(block.blockhash(block.number-1)) % totalBets + 1;
                for (uint i=0; i < nbUsers; i++) {
                    sum += usersBet[users[i]];
                    if (sum >= winningNumber) {
                        selfdestruct(users[i]);
                        return;
                    }
                }
            }
        }
        
    }
    

    所以让我们部署我们的合约并且来玩一把。我们将用我们的两个账户来发送彩金用以太坊币。作为一个功能你会看到我们可以调用函数payable进行支付。

    发送了以太币后,你会发现智能合约现在成立了。

    如果你从彩票运营者账户调用EntLoTyTye()函数,彩票收益将转移给优胜者,并且智能合约也将结束。

    在本文中,我们使用payable修饰符,使它可以发送以太币到我们的智能合约。

    • 以太坊dapp,主要介绍智能合约与dapp应用开发,适合入门。
    • 以太坊开发,主要是介绍使用node.js、mongodb、区块链、ipfs实现去中心化电商DApp实战,适合进阶。

    原文转自这个以太坊博客

    发布在 编程 阅读更多
  • J
    jimi2018

    INTRO 介绍

    Started 入门

    Ethereum 以太坊进阶

    TUTORIAL 教程

    Ethereum 以太坊

    Videos 视频

    PROJECT 项目

    Chain 区块链底层

    • Metaverse 原界链源码
    • EOS EOS链源码
    • BYTOM 比原链源码
    • CITA cita联盟链的底层源码
    • 比特币0.1 最原始的比特币代码
    • Blockbench 区块链性能测试工具
    • Quorum 来自JP Morgan基于Go-Ethereum数据隐私加强的以太坊实现
    • BCOS 来自微众银行的增强版以太坊实现
    • Presto-Ethereum 以太坊增加Presto的SQL访问能力
    • IPFS IPFS的GO语言实现 原理

    SDK 工具包

    • Remix 浏览器编译器
    • Truffle 以太坊Dapp开发脚手架
    • Zeppelin 用于编写安全的以太坊合约框架
    • Web3j 以太坊官方Web3轻量级java SDK
    • Embark 以太坊Dapp开发框架,支持IPFS、Whisper及Orbit调用
    • Web3Swift 一个Web3的swift SDK
    • Porosity 反编译以太坊智能合约工具
    • Solidity-Coverage 检测Solidity代码覆盖
    • Composer 官方可视化Fabric应用开发框架
    • Cakeshop 来自JP Morgan的以太坊可视化管理工具
    • Zokrates 以太坊使用zkSNARKS工具包(实验用)
    • libsnark zkSNARKS C++库

    DOCUMENT 资料

    Ethereum 以太坊

    APPLICATION 应用

    Explorer 链浏览

    Wallet 钱包

    Social 社会

    Exchange 交易所

    Cross Chain 跨链

    Token 代币

    发布在 编程 阅读更多
  • J
    jimi2018

    Geth是在以太坊智能合约开发中最常用的工具(必备开发工具),一个多用途的命令行工具。
    熟悉Geth可以让我们有更好的效率,大家可收藏起来作为Geth命令用法手册。 本文主要是对geth help的翻译,基于最新的geth 1.7.3-stable版本。

    如果你还不知道geth是干什么的,请先阅读入门篇:什么是以太坊?什么是智能合约?
    以下开始正文。

    命令用法

    geth [选项] 命令 [命令选项] [参数…]

    版本:

    1.7.3-stable

    命令:

    account 管理账户
    attach 启动交互式Javascrip{过滤}t环境(连接到节点)
    bug 上报bug Issues
    console 启动交互式Javascrip{过滤}t环境
    copydb 从文件夹创建本地链
    dump Dump(分析)一个特定的块存储
    dumpconfig 显示配置值
    export 导出区块链到文件
    import 导入一个区块链文件
    init 启动并初始化一个新的创世纪块
    js 执行指定的Javascrip{过滤}t文件(多个)
    license 显示许可信息
    makecache 生成ethash验证缓存(用于测试)
    makedag 生成ethash 挖矿DAG(用于测试)
    monitor 监控和可视化节点指标
    removedb 删除区块链和状态数据库
    version 打印版本号
    wallet 管理Ethereum预售钱包
    help,h 显示一个命令或帮助一个命令列表

    ETHEREUM选项:

    --config value TOML 配置文件
    --datadir “xxx” 数据库和keystore密钥的数据目录
    --keystore keystore存放目录(默认在datadir内)
    --nousb 禁用监控和管理USB硬件钱包
    --networkid value 网络标识符(整型, 1=Frontier, 2=Morden (弃用), 3=Ropsten, 4=Rinkeby) (默认: 1)
    --testnet Ropsten网络:预先配置的POW(proof-of-work)测试网络
    --rinkeby Rinkeby网络: 预先配置的POA(proof-of-authority)测试网络
    --syncmode "fast" 同步模式 ("fast", "full", or "light")
    --ethstats value 上报ethstats service URL (nodename:[email protected]:port)
    --identity value 自定义节点名
    --lightserv value 允许LES请求时间最大百分比(0 – 90)(默认值:0)
    --lightpeers value 最大LES client peers数量(默认值:20)
    --lightkdf 在KDF强度消费时降低key-derivation RAM&CPU使用

    开发者(模式)选项:

    --dev 使用POA共识网络,默认预分配一个开发者账户并且会自动开启挖矿。
    --dev.period value 开发者模式下挖矿周期 (0 = 仅在交易时) (默认: 0)

    ETHASH 选项:

    --ethash.cachedir ethash验证缓存目录(默认 = datadir目录内)
    --ethash.cachesinmem value 在内存保存的最近的ethash缓存个数 (每个缓存16MB ) (默认: 2)
    --ethash.cachesondisk value 在磁盘保存的最近的ethash缓存个数 (每个缓存16MB) (默认: 3)
    --ethash.dagdir "" 存ethash DAGs目录 (默认 = 用户hom目录)
    --ethash.dagsinmem value 在内存保存的最近的ethash DAGs 个数 (每个1GB以上) (默认: 1)
    --ethash.dagsondisk value 在磁盘保存的最近的ethash DAGs 个数 (每个1GB以上) (默认: 2)

    交易池选项:

    --txpool.nolocals 为本地提交交易禁用价格豁免
    --txpool.journal value 本地交易的磁盘日志:用于节点重启 (默认: "transactions.rlp")
    --txpool.rejournal value 重新生成本地交易日志的时间间隔 (默认: 1小时)
    --txpool.pricelimit value 加入交易池的最小的gas价格限制(默认: 1)
    --txpool.pricebump value 价格波动百分比(相对之前已有交易) (默认: 10)
    --txpool.accountslots value 每个帐户保证可执行的最少交易槽数量 (默认: 16)
    --txpool.globalslots value 所有帐户可执行的最大交易槽数量 (默认: 4096)
    --txpool.accountqueue value 每个帐户允许的最多非可执行交易槽数量 (默认: 64)
    --txpool.globalqueue value 所有帐户非可执行交易最大槽数量 (默认: 1024)
    --txpool.lifetime value 非可执行交易最大入队时间(默认: 3小时)

    性能调优的选项:

    --cache value 分配给内部缓存的内存MB数量,缓存值(最低16 mb /数据库强制要求)(默认:128)
    --trie-cache-gens value 保持在内存中产生的trie node数量(默认:120)

    帐户选项:

    --unlock value 需解锁账户用逗号分隔
    --password value 用于非交互式密码输入的密码文件

    API和控制台选项:

    --rpc 启用HTTP-RPC服务器
    --rpcaddr value HTTP-RPC服务器接口地址(默认值:“localhost”)
    --rpcport value HTTP-RPC服务器监听端口(默认值:8545)
    --rpcapi value 基于HTTP-RPC接口提供的API
    --ws 启用WS-RPC服务器
    --wsaddr value WS-RPC服务器监听接口地址(默认值:“localhost”)
    --wsport value WS-RPC服务器监听端口(默认值:8546)
    --wsapi value 基于WS-RPC的接口提供的API
    --wsorigins value websockets请求允许的源
    --ipcdisable 禁用IPC-RPC服务器
    --ipcpath 包含在datadir里的IPC socket/pipe文件名(转义过的显式路径)
    --rpccorsdomain value 允许跨域请求的域名列表(逗号分隔)(浏览器强制)
    --jspath loadscrip{过滤}t Javascrip{过滤}t加载脚本的根路径(默认值:“.”)
    --exec value 执行Javascrip{过滤}t语句(只能结合console/attach使用)
    --preload value 预加载到控制台的Javascrip{过滤}t文件列表(逗号分隔)

    网络选项:

    --bootnodes value 用于P2P发现引导的enode urls(逗号分隔)(对于light servers用v4+v5代替)
    --bootnodesv4 value 用于P2P v4发现引导的enode urls(逗号分隔) (light server, 全节点)
    --bootnodesv5 value 用于P2P v5发现引导的enode urls(逗号分隔) (light server, 轻节点)
    --port value 网卡监听端口(默认值:30303)
    --maxpeers value 最大的网络节点数量(如果设置为0,网络将被禁用)(默认值:25)
    --maxpendpeers value 最大尝试连接的数量(如果设置为0,则将使用默认值)(默认值:0)
    --nat value NAT端口映射机制 (any|none|upnp|pmp|extip:<IP>) (默认: “any”)
    --nodiscover 禁用节点发现机制(手动添加节点)
    --v5disc 启用实验性的RLPx V5(Topic发现)机制
    --nodekey value P2P节点密钥文件
    --nodekeyhex value 十六进制的P2P节点密钥(用于测试)

    矿工选项:

    --mine 打开挖矿
    --minerthreads value 挖矿使用的CPU线程数量(默认值:8)
    --etherbase value 挖矿奖励地址(默认=第一个创建的帐户)(默认值:“0”)
    --targetgaslimit value 目标gas限制:设置最低gas限制(低于这个不会被挖?) (默认值:“4712388”)
    --gasprice value 挖矿接受交易的最低gas价格
    --extradata value 矿工设置的额外块数据(默认=client version)

    GAS价格选项:

    --gpoblocks value 用于检查gas价格的最近块的个数 (默认: 10)
    --gpopercentile value 建议gas价参考最近交易的gas价的百分位数,(默认: 50)

    虚拟机的选项:

    --vmdebug 记录VM及合约调试信息

    日志和调试选项:

    --metrics 启用metrics收集和报告
    --fakepow 禁用proof-of-work验证
    --verbosity value 日志详细度:0=silent, 1=error, 2=warn, 3=info, 4=debug, 5=detail (default: 3)
    --vmodule value 每个模块详细度:以 <pattern>=<level>的逗号分隔列表 (比如 eth/*=6,p2p=5)
    --backtrace value 请求特定日志记录堆栈跟踪 (比如 “block.go:271”)
    --debug 突出显示调用位置日志(文件名及行号)
    --pprof 启用pprof HTTP服务器
    --pprofaddr value pprof HTTP服务器监听接口(默认值:127.0.0.1)
    --pprofport value pprof HTTP服务器监听端口(默认值:6060)
    --memprofilerate value 按指定频率打开memory profiling (默认:524288)
    --blockprofilerate value 按指定频率打开block profiling (默认值:0)
    --cpuprofile value 将CPU profile写入指定文件
    --trace value 将execution trace写入指定文件

    WHISPER实验选项:

    --shh 启用Whisper
    --shh.maxmessagesize value 可接受的最大的消息大小 (默认值: 1048576)
    --shh.pow value 可接受的最小的POW (默认值: 0.2)

    弃用选项:

    --fast 开启快速同步
    --light 启用轻客户端模式

    其他选项:

    –help, -h 显示帮助

    如果你想马上开始分享你一个以太坊教程,可以直接在线练习使用geth命令。

    发布在 编程 阅读更多

与 V2MM 的连接断开,我们正在尝试重连,请耐心等待