web3.eth.abi.decodeLog(inputs, hexString, topics) 函数中 inputs 如何获取

官方的Demo是这样的。文档中有提到,第一个参数是 json 格式的参数,就是需要解码的数据类型。问题是这个数据类型怎么获取。

文档地址:https://web3js.readthedocs.io/en/v1.2.11/web3-eth-abi.html#decodelog

找到对应的合约地址,然后去看相应的函数里面具体是什么类型。

例如:

Chainlink contract transfer event

转移事件

event Transfer(address indexed from, address indexed to, uint256 value);

如果想解码需要的 inputs

[{
    type: 'address',
    name: 'from',
    indexed: true
},{
    type: 'address',
    name: 'to',
    indexed: true
},{
    type: 'uint256',
    name: 'value'
}]

原文:https://ethereum.stackexchange.com/questions/79788/what-is-input-in-web3-eth-abi-decodeloginputs-hexstring-topics

web3py transaction 数据解析

使用 web3py 代码得到的是一个字典结构的数据,但是大部分的数据都是 HexBytes,非常头疼这些数据的具体内容,查阅了一些资料。

首先是代码:

from web3 import Web3

w3 = Web3(Web3.HTTPProvider('https://mainnet.infura.io/v3/f6c8f8c206d6431599b73ead57ab9737'))
print(w3.eth.get_transaction_receipt('0x0acf73a58fbb879ffc43150aef0fc31cbe94cab036ba29948923994852643e83'))

返回结果:

有一些内容可以直接看出是什么,但是也有很多 HexBytes 的不知道是什么,查到很多资料之后才知道这些是经过编码的。编码规律是有资料的,ABI 接口中。

比如 topics 中一个很常见的:

topics[0]

0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef

 

这是  Transfer 就是转账的函数

Transfer(address,address,uint256)

topics[1]是从哪个账户转出; topics[2] 是转入哪个账户;data 是转账的数值。

etherscan 可以解析出所有的信息,格式化的很好。

例如:

https://etherscan.io/tx/0x0acf73a58fbb879ffc43150aef0fc31cbe94cab036ba29948923994852643e83

dapp 开发盛会:QTUM 2018 黑客马拉松

QTUM 2018 黑客马拉松

将创意与想法实现的舞台

与全世界开发者一道加入Qtum量子链黑客马拉松:一个面向全球的在线马拉松!

Qtum黑客马拉松将邀请来自世界各地的顶尖开发者,利用QTUM区块链技术,一同重塑数字内容、娱乐、身份识别、区块链经济的新面貌。

参与的开发者将有机会与Qtum团队及其他区块链专家们零距离接触,体验Qtum的各种全新功能。在截止日前报名参与黑客马拉松,将有机会赢取价值高达50万美金的QTUM代币奖励!部分获奖团队核心成员还将受邀参加QTUM在旧金山举办的首届DevCon以及获得虚拟孵化支持。

 

Qtum 2018 黑客马拉松

https://hackathon.qtum.org/zh

DEL&极部落区块链技术沙龙-高性能TPS公链之容器与分片

主办方介绍:


DEL通过最先进的区块分片技术(Sharding BlockChain)、链上容器(Docker Layer)技术、侧链(Sidechain)技术以及DPOS机制,解决区块链发展进程中现有的实用化程度低、交易确认时间长、多链融合能力弱、存储空间需求大等问题,实现应用快速落地、快速交易、多链融合、低存储需求,开启区块链4.0时代。

极部落GeekBlock——技术社区生态构建者。自成立以来,已经在全国多个城市组织技术社群活动几十场,几年运营下来积累了5000+互联网公司CTO,300+极客技术大咖,以及数十万技术开发人员资源。

一览英才网创建于2006年,是基于行业垂直细分和区域横向细分的特大型网络招聘平台,深耕专业技术人才全球范围内的配置与在线学习服务,为全国7000多万专业技术人才提供了相关服务。

本周日深圳区块链技术沙龙,过来聊聊,http://www.huodongxing.com/event/9445301951800?td=2241799495385

dapp 是什么?五分钟一文明白 dapp,dapp 和 app 有什么区别?

DApp 是 decentralized application 中文分布式 APP 的缩写。
一个 DApp 有后台代码运行在分布式点对点网络中。传统的 APP 的后台代码是运行在中心化的服务器。
一个 DApp 的前端代码可以由任何语言开发,和传统的 APP 一样。还有,DApp 的前端代码可以托管在分布式存储的服务中,例如:Swarm 或者 IPFS。
如果一个 应用 = 前端 + 后台,因为以太坊合约是由运行在以太坊分布式点对点网络中的代码组成的,所以 分布式应用 = 前端 + 合约。
图片演示一个 DApp 架构:

dapp=分布式应用:http://dappchina.cn/

最火的区块链来了!阿里云全球区块链大赛发布!

6月25日,在北京国家会议中心2018 LF Asia大会上,阿里云宣布启动2018全球区块链大赛,通过天池平台,面向全球区块链开发者设置了数据资产、供应链金融、溯源技术等多个领域的命题,参赛选手可自由选择并提交解决方案。阿里云希望通过集思广益征集各类区块链解决方案,并引入行业客户验证方案效果,将区块链技术应用到实体经济中去,加快这项新兴技术的普及。

阿里巴巴资深技术专家易立发布全球区块链大赛

“区块链技术是驱动下一代互联网变革的核心技术,我们希望这次区块链大赛,能激发全球的开发者协同创新。”阿里云区块链产品技术负责人易立表示:“应用生态和开放性是决定区块链技术长远发展的重要因素,阿里云将同时支持开源的企业级区块链技术Hyperledger Fabric和蚂蚁区块链,给客户更多开放的选择。

 

据悉,本次大赛的评审团来自对区块链技术最关注的行业和区块链技术最权威的代表,包括来自Hyperledger基金会、德国电信、纸贵科技、网商银行、阿里巴巴等在内的数十位专家将对选手的作品做出专业的评审。Hyperledger基金会中国负责人龙文选先生也到场致辞,表示了Hyperledger对大赛的支持并预祝大赛圆满成功。

阿里云研究员余锋(左)和Hyperledger基金会中国负责人龙文选(右)

作为一种革新的分布式账本技术,区块链具备去中心化、公开透明、不可篡改等特点,本次大赛为极客们提供了一个自我发挥舞台,以期为区块链技术健康而快速发展做出一份贡献:比赛中选手在阿里云基于Hyperledger Fabric的区块链技术平台之上,构建相应业务场景创新应用。

全球正处于新一轮互联网技术革新的起点,而中国正成为以区块链为代表的新技术的中心。在“2017全球区块链企业专利排行榜(前100名)”上,中国入榜企业占比达到49%之高,其次为美国占比33%。阿里巴巴集团以全球专利总量49件排名第一,美国银行排名第二。

目前,阿里巴巴的区块链技术在金融领域已有深度应用,6月25日,港版支付宝AlipayHK上线了全球首个基于区块链的电子钱包跨境汇款服务。在港工作的菲律宾人格蕾丝(Grace)完成了第一笔汇款,耗时仅3秒。几个月前,阿里云也推出了一系列区块链解决方案,开发者在几分钟之内就能够完成一项区块链应用的配置和部署,该方案已应用在天猫奢侈品的正品溯源上,成效显著。

阿里云官网显示,本次全球区块链大赛分为初赛、复赛和决赛三个阶段,决赛将在2018杭州云栖大会现场进行最后的比拼,业内领袖和行业大客户也将齐聚一堂,共同探讨区块链技术健康发展。

赛事简介

大赛关注并致力于促进区块链技术在不同场景应用落地,阿里云会为创新优秀项目提供技术指导与商业孵化,以期为区块链行业的健康与理性发展。大赛由阿里云主办,多家行业知名机构协办,邀请行业里国内外重量级嘉宾评审指导。

大赛分为初赛、复赛、决赛三个阶段。初赛会邀请各位报名者完成一个区块链技术的基础任务,复赛请各位选择一个场景应用并制作一个解决方案,场景包括:数据资产业务场景、供应链金融场景、底层技术、公益、医疗、物流、溯源、知识版权等领域,决赛则会从入围选手/团队中评选出优胜者。每个通过初赛的团队将获得阿里云提供的发布平台使用权限,该平台国内外均可用。

区块链开发交流群,加微信自动邀请进群:

2018阿里云全球区块链大赛

https://tianchi.aliyun.com/programming/introduction.htm?spm=5176.100066.0.0.2c3f33af5TokAL&raceId=231665

星云激励计划-每提交一个有效DApp即可获得100 NAS

星云激励计划-每提交一个有效DApp即可获得100 NAS https://incentive.nebulas.io/cn/signup.html?invite=zbuIr

 

配套教程:

手把手教你星云DApp开发(第二部分)

https://mp.weixin.qq.com/s/2ZrKnOoWyNxMUyy2OUlpiA

手把手教你星云DApp开发(第一部分)

https://mp.weixin.qq.com/s?__biz=MzU2MTI5OTI3MA==&mid=2247484586&idx=2&sn=c0cd24f74a8527a7fd07391b758a4bf8&chksm=fc7bae83cb0c2795e82e1bbba1f083f6bfd1650dea46cf130265c3e86ad5d3acb22d035e768a&scene=21#wechat_redirect

星云激励计划第一季启动在即,千万奖金奖励区块链开发者

星云链主网已于2018年3月30日上线。为了构建可持续升级良性生态,星云团队鼓励更多开发者在星云链主网上持续开发更多、更好的去中心化应用(DApp)。秉承着让每个人在去中心化协作中公平获益的理念,星云团队在此向全球开发者和认同星云理念的推广者发出邀请,欢迎参加第一季星云激励计划。有了星云主网,仅需Javascript和一杯下午茶的时间,您就可以开发属于您的第一个DApp。

区块链开发从未如此简单,

每个人都可以在区块链上开发自己的应用。

人人都是加速器,

每个人都可以在推广激励计划中体现价值,获得收益。

dapp 开发:10 分钟 5 步发布以太坊 ERC20 代币

1.安装 METAMASK

Brings Ethereum to your browser

一个可以浏览器上进行操作的以太坊钱包,推荐 Chrome。

Chrome 插件安装地址:

https://chrome.google.com/webstore/detail/metamask/nkbihfbeogaeaoehlefnkodbefgpgknn​chrome.google.com

2.在 METAMASK 创建钱包

 

3.从以太坊官网复制代币代码模板

Create a cryptocurrency contract in Ethereum​www.ethereum.org

https://www.ethereum.org/token

从以太坊官网复制的代码模板

pragma solidity ^0.4.16;

interface tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData) external; }

contract TokenERC20 {
    // Public variables of the token
    string public name;
    string public symbol;
    uint8 public decimals = 18;
    // 18 decimals is the strongly suggested default, avoid changing it
    uint256 public totalSupply;

    // This creates an array with all balances
    mapping (address => uint256) public balanceOf;
    mapping (address => mapping (address => uint256)) public allowance;

    // This generates a public event on the blockchain that will notify clients
    event Transfer(address indexed from, address indexed to, uint256 value);

    // This notifies clients about the amount burnt
    event Burn(address indexed from, uint256 value);

    /**
     * Constructor function
     *
     * Initializes contract with initial supply tokens to the creator of the contract
     */
    function TokenERC20(
        uint256 initialSupply,
        string tokenName,
        string tokenSymbol
    ) public {
        totalSupply = initialSupply * 10 ** uint256(decimals);  // Update total supply with the decimal amount
        balanceOf[msg.sender] = totalSupply;                // Give the creator all initial tokens
        name = tokenName;                                   // Set the name for display purposes
        symbol = tokenSymbol;                               // Set the symbol for display purposes
    }

    /**
     * Internal transfer, only can be called by this contract
     */
    function _transfer(address _from, address _to, uint _value) internal {
        // Prevent transfer to 0x0 address. Use burn() instead
        require(_to != 0x0);
        // Check if the sender has enough
        require(balanceOf[_from] >= _value);
        // Check for overflows
        require(balanceOf[_to] + _value >= balanceOf[_to]);
        // Save this for an assertion in the future
        uint previousBalances = balanceOf[_from] + balanceOf[_to];
        // Subtract from the sender
        balanceOf[_from] -= _value;
        // Add the same to the recipient
        balanceOf[_to] += _value;
        emit Transfer(_from, _to, _value);
        // Asserts are used to use static analysis to find bugs in your code. They should never fail
        assert(balanceOf[_from] + balanceOf[_to] == previousBalances);
    }

    /**
     * Transfer tokens
     *
     * Send `_value` tokens to `_to` from your account
     *
     * @param _to The address of the recipient
     * @param _value the amount to send
     */
    function transfer(address _to, uint256 _value) public {
        _transfer(msg.sender, _to, _value);
    }

    /**
     * Transfer tokens from other address
     *
     * Send `_value` tokens to `_to` on behalf of `_from`
     *
     * @param _from The address of the sender
     * @param _to The address of the recipient
     * @param _value the amount to send
     */
    function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) {
        require(_value <= allowance[_from][msg.sender]);     // Check allowance
        allowance[_from][msg.sender] -= _value;
        _transfer(_from, _to, _value);
        return true;
    }

    /**
     * Set allowance for other address
     *
     * Allows `_spender` to spend no more than `_value` tokens on your behalf
     *
     * @param _spender The address authorized to spend
     * @param _value the max amount they can spend
     */
    function approve(address _spender, uint256 _value) public
        returns (bool success) {
        allowance[msg.sender][_spender] = _value;
        return true;
    }

    /**
     * Set allowance for other address and notify
     *
     * Allows `_spender` to spend no more than `_value` tokens on your behalf, and then ping the contract about it
     *
     * @param _spender The address authorized to spend
     * @param _value the max amount they can spend
     * @param _extraData some extra information to send to the approved contract
     */
    function approveAndCall(address _spender, uint256 _value, bytes _extraData)
        public
        returns (bool success) {
        tokenRecipient spender = tokenRecipient(_spender);
        if (approve(_spender, _value)) {
            spender.receiveApproval(msg.sender, _value, this, _extraData);
            return true;
        }
    }

    /**
     * Destroy tokens
     *
     * Remove `_value` tokens from the system irreversibly
     *
     * @param _value the amount of money to burn
     */
    function burn(uint256 _value) public returns (bool success) {
        require(balanceOf[msg.sender] >= _value);   // Check if the sender has enough
        balanceOf[msg.sender] -= _value;            // Subtract from the sender
        totalSupply -= _value;                      // Updates totalSupply
        emit Burn(msg.sender, _value);
        return true;
    }

    /**
     * Destroy tokens from other account
     *
     * Remove `_value` tokens from the system irreversibly on behalf of `_from`.
     *
     * @param _from the address of the sender
     * @param _value the amount of money to burn
     */
    function burnFrom(address _from, uint256 _value) public returns (bool success) {
        require(balanceOf[_from] >= _value);                // Check if the targeted balance is enough
        require(_value <= allowance[_from][msg.sender]);    // Check allowance
        balanceOf[_from] -= _value;                         // Subtract from the targeted balance
        allowance[_from][msg.sender] -= _value;             // Subtract from the sender's allowance
        totalSupply -= _value;                              // Update totalSupply
        emit Burn(_from, _value);
        return true;
    }
}

4.修改代币参数

主要是修改名称,如截图所示,修改为你的代币名称。

5.发布到以太坊网络

以太坊在线开发环境,可以自动连接到 METAMASK。

https://remix.ethereum.orgRemix – Solidity IDERemix – Solidity IDE

https://remix.ethereum.org/

如果你的以太坊账号上已经有余额的话,就可以直接进行部署了。

 

发布之后可以在 METAMASK 直接看到自己刚发布的代币:

AICoin 是为了促进人工智能社区发展诞生的代币,代币的主要用途是奖励人工智能开发者分享数据和模型。

英文名:AICoin

中文名:人工智能币

简称:AIC

总量:100000000.000AIC

技术合作微信:fendouai,注明:DAPP

DAPP开发,区块链开发群号:374475398

DAPP 开发

 

5分钟在以太坊上发行自己的代币

声明:本文仅为兴趣爱好者作为教程参考,请不要用于任何的商业用途。

在正式开始之前,需要准备:
科学上网的工具
chrome 浏览器

那么我们开始吧。
第一步:在chrome浏览器上安装metamask的插件。
点击以下网址进行安装, 点击添加至chrome。
[https://chrome.google.com/webstore/detail/metamask/nkbihfbeogaeaoehlefnkodbefgpgknn],

或者进入官网安装下载chrome插件:
https://metamask.io/

点击添加扩展程序

注:metamask除了是一个简单的钱包外,它可以使得Chrome浏览器变身成以太坊浏览器,让使用者通过浏览器和以太坊智能合约互动

第二步: 设置metamask账号 并转一些eth
点击chrome浏览器右上角metamask图标,同意隐私条款和使用条款

输入并确认密码,创建账号

将12个助记词抄下来,保存好

此时账号已经创建好,点击右上角更多,可以开始向你的地址转账了。
可以向你的地址转0.01颗eth,用于发行代币

第三步: 发行代币
进入以下网站:
[http://tokenfactory.surge.sh/#/factory]

如图我们打算发行总量为 100000.00 的RBC,注意此时我们选择的小数点后两位,这也就意味着我们的发行量是10万,如果我们选择的是小数位1位,总量将变为100万。

如图提示我们本次发行代币的矿工费最多是5.8USD, 你可以通过改变Gas价格来调高或者降低费用,gas价格越高,执行速度越快。
点击提交,恭喜你发行了自己代币!剩下的就是等待了。

你可以在[https://etherscan.io/ 查询你的metamask eth地址找到你刚才的交易。找到contract creation这一笔。]

复制你的token contract address

将刚刚的合约地址贴进去 [http://tokenfactory.surge.sh/#/tokensearch]

你可以向其他用户转账啦!注: 由于你发行的是在以太坊上的erc-20代币,所以转账也需要花费eth哦

Token创建后任何人都可以在这里搜索到你的代币及详情 [https://etherscan.io/tokens]

 

原文链接:http://wangmengqi.logdown.com/posts/2473648-tutorial-workshop-on-smart-contracts-issued-tokens