[Go] 浅谈 Golang struct 与 PHP class 的相似

摘要:Golang 中的 struct 与 PHP 的 class 在使用方式上差不多。 struct 中的成员可以类比 class 中的属性,struct 中的成员函数可以类比 class 中的方法。 对比示例: // Golang type CollectorOption func(*Collecto 阅读全文
posted @ 2020-04-02 15:46 ercom 阅读 (7) 评论 (0) 编辑

[FAQ] Git 修改最后一次的提交人和提交时间 ?

摘要:$ date -R Tue, 21 Mar 2021 21:08:58 +0800 $ git commit --amend --author="xxx <xxx@email.com>" --date="Tue, 21 Mar 2021 21:08:58 +0800" Link:https://ww 阅读全文
posted @ 2020-04-02 15:16 ercom 阅读 (5) 评论 (0) 编辑

[Blockchain] 开发完真实的 DApp 后才能得出的结论与看法

摘要:1. 最近经常看到地方新闻有关 区块链在追踪溯源方面被实际应用,但是我本人认为这很大程度上可能是伪命题。 因为,是不是区块链、或者说有没有办法更改数据,这都很难说,本质上这个链还是由机构控制,所以对此我是持怀疑态度的。 2. 技术有轻重之分,在区块链里面就是明显‘链’比‘币’重,目前 DApp 更多 阅读全文
posted @ 2020-03-31 16:50 ercom 阅读 (16) 评论 (0) 编辑

[Contract] openzeppelin/cli 开发, 部署, 升级智能合约

摘要:Install Dependency $ npm init $ npm install @openzeppelin/cli Setup project $ npx openzeppelin init Write first contract in contracts/, then compile p 阅读全文
posted @ 2020-03-28 17:20 ercom 阅读 (6) 评论 (0) 编辑

[FAQ] Truffle Deployer 合约传参问题: Invalid number of parameters for "undefined". Got 0 expected 1!

摘要:在使用 `truffle migrate` 时,如果合约的构造函数需要传参,而部署脚本里没有传的时候,就会报这个错。 未传参时: const Migrations = artifacts.require("Migrations"); module.exports = function(deploye 阅读全文
posted @ 2020-03-26 15:19 ercom 阅读 (2) 评论 (0) 编辑

[Blockchain] 去中心化与互联网分布式的联系与区别

摘要:去中心化和传统分布式都是多机应用,这是它们的共同之处,但是背后有着不一样的用途。 我们所理解的传统分布式及其应用可以解决两个问题:冗余备份/扩容 和 并行计算。 而去中心化应用的目的是维护不可逆转数据的状态机,它的分布式用途集中在冗余,并没有并行计算,不是传统分布式应用的场景。 去中心化不是一定就不 阅读全文
posted @ 2020-03-25 19:03 ercom 阅读 (7) 评论 (0) 编辑

[FAQ] Solidity 并发执行 ? 重入攻击 ?

摘要:Solidity 实现的合约中,函数操作都是原子操作,旷工本地执行,取得共识后发布到区块链上。 实际发布到区块链上的不存在并发,全节点同步状态到本地。 Solidity 中有三种方式进行转账,address.transfer、address.send、address.call。 Solidity 重 阅读全文
posted @ 2020-03-25 17:20 ercom 阅读 (10) 评论 (0) 编辑

[Contract] Solidity 多种访问控制 (Access Control) 实现方式

摘要:在 solidity 中控制访问,一般是通过 modifier 修饰符方法来直接做。 那么对于稍复杂的多种访问控制,通常需要一个统一操作的模块化类库。 现在已经有了这样的类库存在,我们通过一个实现功能上增删改查的 library,然后在具体的合约中声明变量、按需使用。 建议参考 openzeppel 阅读全文
posted @ 2020-03-25 16:49 ercom 阅读 (7) 评论 (0) 编辑

[Contract] 一次搞懂 Solidity 的 using xx for xx

摘要:using A for *; # 把 A 的函数附给任意类型使用 using A for B; # 意思是把 A 中的方法附给 B 使用 使用上面的方式,那么在我们的合约中定义了 B 类型的变量后,就可以像 B.xx() 这样使用 A 库的函数了。 举个局部例子:_miners 可以直接使用 has 阅读全文
posted @ 2020-03-24 18:35 ercom 阅读 (4) 评论 (0) 编辑

[FAQ] VisualStudio, Source file requires different compiler version (current compiler is 0.6.1+cxxxxxx)

摘要:当使用的 Solidity 库文件中 pragma 指定的 版本 与本地编译器的使用版本不一致时,会出现这类提示。 解决方式是菜单栏 View -> Extensions -> Extension Settings -> Compile Using Remote Versio 编辑 settings 阅读全文
posted @ 2020-03-24 14:27 ercom 阅读 (14) 评论 (0) 编辑

[Ethereum] 浅谈 ERC20 在 openzeppelin-contracts 中的结构与实现

摘要:目前 openzeppelin-contracts 的稳定版是 v2.5,截止到本文发布,最新的 Tag 为 v3.0.0-rc.0 以下是 token/ETC20 的文件列表: IERC20.sol 是 interface 接口文件,不包含实现。 ERC20.sol 是对上面 interface 阅读全文
posted @ 2020-03-24 14:22 ercom 阅读 (10) 评论 (0) 编辑

[Ethereum] 浅谈加密商品市场 OpenSea 与 opensea-js

摘要:OpenSea 是用于交易以太坊加密商品的网上商店,主要的商品是 ERC721、ERC1155 标准的 Token。 它的特色就在于,只需要一个部署好的智能合约,你就能在 OpenSea 提供的界面上交易,这点类似 OneClickdApp 这一类针对合约提供统一交互的网站。 所以在交易层面你完全不 阅读全文
posted @ 2020-03-23 15:58 ercom 阅读 (12) 评论 (0) 编辑

[Cloud] Google colab GPU 免费使用, 可挂载 Google drive

摘要:colab 的文本行就相当于命令行,命令统一都在前面加 ! 。 开启 GPU 加速,通过菜单栏的 “修改” 菜单,选择 “笔记本设置”。 挂载 Google drive 的方式有两种。 第一种方式是点击左边栏的文件夹,装载谷歌云端硬盘即可。 第二种方式是运行以下两行代码,点击出现的链接获得验证码后输 阅读全文
posted @ 2020-03-21 08:28 ercom 阅读 (20) 评论 (0) 编辑

[Ethereum] Gas Station Network (GSN) eip-1613 与 Gas Relay Network (GRN) eip-1077

摘要:在 Ethereum dapp 中,任何涉及状态改动的交易都需要消耗 Gas,这限制了很多没有钱包或者 ETH 的用户对 dapp 的采用。 理念 让非以太用户能够访问智能合约 (如dapps),允许合约接受“接听来电”,即为来电付费。 让合约在可公开访问的渠道上“监听”(例如web URL)。鼓励 阅读全文
posted @ 2020-03-20 16:46 ercom 阅读 (6) 评论 (0) 编辑

[Contract] truffle-flattener 合并 Solidity 文件的依赖到一个文件

摘要:使用 $ npm install truffle-flattener -g $ truffle-flattener <solidity-files> > output.sol 为什么不是 Solidity Flattener ? truffle-flattener 与 truffle 结合紧密,利用 阅读全文
posted @ 2020-03-20 14:30 ercom 阅读 (11) 评论 (0) 编辑

[Contract] 一次搞懂 ETH Gas, GasPrice, GasLimit 之间关系与使用

摘要:Gas 是一个交易费的基本单位(unit),类似汽油的单位“升”,比如一次链上交易可能消耗 5 Gas 汽油,由运行的程序决定。 GasPrice 是一个 Gas 的单价,一般用 Gwei 来形象表示 ( 但注意实际在应用程序中都是使用 Wei ),GasPrice 由用户自己设置,其大小会决定交易 阅读全文
posted @ 2020-03-20 00:03 ercom 阅读 (17) 评论 (0) 编辑

[Blockchain] 以太坊主流测试网 ropsten 和 kovan 的区别 以及 如何选择

摘要:ropsten 采用 POW (Proof-of-Work)共识机制,挖矿难度系数非常低,容易被攻击,不够低碳环保。 kovan 采用 POA (Proof-of-Authority)共识机制,不需要挖矿,由开发人员主动申请、权威节点生成ETH,低碳环保。 所以想要完全自助的,获取 ropsten 阅读全文
posted @ 2020-03-19 15:43 ercom 阅读 (25) 评论 (0) 编辑

[Blockchain] 前后端完全去中心化的思路, IPFS 与 Ethereum Contract

摘要:我们在使用智能合约的时候,一般是把它当前去中心、减少信任依赖的后端存在。 如果没有特殊后端功能要求,一个 DApp 只需要前端驱动 web3js 就可以实现了。 可以看到,现在前端部分依旧是一个中心化的客户端。思路是把整个前端 dist 上传到 ipfs 获取项目的 hash 访问路径。 这一步不需 阅读全文
posted @ 2020-03-19 13:55 ercom 阅读 (15) 评论 (0) 编辑

[Cryptocurrency] rDAI 与 DAI 的区别, 如何质押 rDAI 获取利息

摘要:以下合约操作需要在安装 MetaMask ( 以太坊的浏览器钱包 ) 的情况下进行。 rDAI 通过和 DAI 1 : 1 互换得到,在 rDAI 提供的 dapp 上面操作 https://app.rdai.money 选择 CREATE 标签,第一步加好“收益”收取地址池(一个就可以),第二步质 阅读全文
posted @ 2020-03-18 18:39 ercom 阅读 (11) 评论 (0) 编辑

[Contract] ETH 与 Gas 之间的价格转换关系, Ethereum Gas Price Chart

摘要:以太坊网络每天的平均气价(Gas)是变化,有一张价格表:https://etherscan.io/chart/gasprice 然后你可以知道 1 Gas = xx Gwei,再换算一下 1 ETH = xx Gas 即可。 另外你需要 搞懂 ETH Gas, GasPrice, GasLimit 阅读全文
posted @ 2020-03-14 09:11 ercom 阅读 (15) 评论 (0) 编辑

[Contract] Solidity 合约发布到测试网 ropsten 的作用

摘要:当我们本地完成了一系列测试以后,接下来就是准备上线了。 关于合约部署可以参考这篇:Solidity 合约使用 truffle 部署到测试网和主网 你可能有一个疑问,在上主网之前,先上测试网的作用是什么呢? 理由是,我们可以通过 MetaMask 切换到 ropsten 网络,进行 Dapp 上的常规 阅读全文
posted @ 2020-03-14 07:07 ercom 阅读 (9) 评论 (0) 编辑

[Airdrop] QoinPro 每天收获固定的空投币, 登录直接送币

摘要:目前 QoinPro 面板累计的币有二十多款,覆盖主流,比如有 ADA、BCH、BTC、DASH、LTC ... Q:那么具体我需要做什么? A:进入 首页,加入时选择 国外社交媒体账号 或者 谷歌邮箱 登录即可(有VPN就行)。 Q:怎么获得空投币? A:首次登录就会自动到账一波,每天固定收获少量 阅读全文
posted @ 2020-03-13 21:47 ercom 阅读 (19) 评论 (0) 编辑

[Contract] Solidity 合约使用 truffle 部署到测试网和主网

摘要:使用 truffle 发不到非本地的以太坊主网或者测试网时,需要提供钱包的助记词或私钥。 首先安装 truffle 组件:npm install @truffle/hdwallet-provider 注册 https://infura.io,得到 project id 和 key,使用其 api 连 阅读全文
posted @ 2020-03-13 19:22 ercom 阅读 (27) 评论 (0) 编辑

[FAQ] Solidity 合约销毁 ?

摘要:仅创建者可以销毁合约的示例: address public owner; // When deploy contract constructor() public { owner = msg.sender; } function destroyContract() external onlyOwne 阅读全文
posted @ 2020-03-10 16:23 ercom 阅读 (16) 评论 (0) 编辑

[PHP] 几个拖慢 PHP 程序/API 运行速度的点

摘要:1. 启动、查找 Session 需要一定开销,默认 session.save_handler=files,可以通过修改为 redis 提速。 files 的 session 会阻塞请求?https://log.zvz.im/2016/02/27/PHP-session/ 某些接口业务可能不需要开启 阅读全文
posted @ 2020-03-10 15:48 ercom 阅读 (26) 评论 (0) 编辑

[FAQ] MetaMask ALERT: 交易出错. 合约代码执行异常.

摘要:首先确认载入的合约地址是否是最新的,比如 web3 载入的 abi 格式的 json 文件名 正不正确。 其次需要检查合约逻辑是否都正确,以及是否是合约抛出的错误,这两点最好是通过写测试用例来保证。 最后看调用方是否传参有问题,包括调用合约时传递的任何一个选项,比如 from, value, dat 阅读全文
posted @ 2020-03-10 00:49 ercom 阅读 (33) 评论 (0) 编辑

[PHP] 浅谈 Laravel 三大验证方式的区别, auth:api, passport, auth:airlock

摘要:auth:api 最先出来,提供了最简单和最实用的方式进行 api 身份校验。 关于它的含义和用法你可以参考以下两篇: 浅谈 Laravel Authentication 的 auth:api 浅谈 Laravel auth:api 不同驱动 token 和 passport 的区别 passpor 阅读全文
posted @ 2020-03-09 14:09 ercom 阅读 (117) 评论 (0) 编辑

[Contract] 测试 Solidity 合约代码的两种方式 与 优缺点

摘要:第一种,使用 Truffle 这类继承了测试工具的框架,只要编写 js 脚本就可以测试 web3 与合约的逻辑。 优点是完全可控,粒度够细,便于集成测试;缺点是需要花费一些时间编写测试脚本,不过值得。 第二种,使用 Remix 提供的图形化方法调用,可以快速验证方法返回值的正确性,方便了调试。 只需 阅读全文
posted @ 2020-03-09 00:29 ercom 阅读 (27) 评论 (0) 编辑

[FAQ] JS 实现暂停(睡眠) Sleep 与 倒计时 ?

摘要:想要暂停/睡眠一秒,可以参考使用以下方式: async () => { await (new Promise((resolve) => setTimeout(resolve, 1000))) } 如果是倒计时,那么只需要把 sleep 可以放在 while 循环里,满足指定条件后再 break 退出 阅读全文
posted @ 2020-03-08 21:23 ercom 阅读 (23) 评论 (0) 编辑

[FAQ] Solidity 实现倒计时 (count down) ?

摘要:思路:一种方式是使用 ethereum-alarm-clock,另一种是合约实现当前过去了多少时间,外部进行不间断调用获得。 Any else? Link:https://www.cnblogs.com/farwish/p/12424187.html 阅读全文
posted @ 2020-03-08 21:18 ercom 阅读 (26) 评论 (0) 编辑

[FAQ] web3js, Error: [number-to-bn] while converting number 0.1 to BN.js instance, error: invalid number value

摘要:我们在调用合约方法时,都可以传一些参数的,比如转账金额 value。 value 的单位是 wei,这是一个很小的单位,所以一般数值很大。 如果误把 ether 当成 wei 传参,就会报标题中的错误。 注意,把 ether 转 wei 需要先把 ether 的值转成字符串。 比如 0.1 ethe 阅读全文
posted @ 2020-03-06 00:26 ercom 阅读 (26) 评论 (0) 编辑

[FAQ] web3js, Error: Please pass numbers as strings or BN objects to avoid precision errors.

摘要:我们在调用合约方法时,都可以传一些参数的,比如转账金额 value。 value 的单位是 wei,这是一个很小的单位,所以一般数值很大。 注意,把 ether 转 wei 需要先把 ether 的值转成字符串,不然就会报出标题中的错误。 比如 0.1 ether 转 wei 使用 web3.uti 阅读全文
posted @ 2020-03-06 00:18 ercom 阅读 (18) 评论 (0) 编辑

[Contract] 监听 MetaMask 网络变化, 账号切换

摘要:为什么需要监听网络变化?目前在 MetaMask 中切换网络,网页会自动刷新,但是这一特性后面将停止使用。 MetaMask: MetaMask will soon stop reloading pages on network change. If you rely upon this behav 阅读全文
posted @ 2020-03-03 20:24 ercom 阅读 (32) 评论 (0) 编辑

[Contract] web3.eth.getAccounts, web3.eth.getCoinbase 使用场景区别

摘要:web3.eth.getAccounts() 返回节点控制的账号列表(Promise returns Array) web3.eth.getCoinbase() 返回挖矿奖励所归集的地址(Promise returns String) 根据字面意思很难知道 两个函数 分别用在哪块,下面给出具体解释: 阅读全文
posted @ 2020-03-02 00:46 ercom 阅读 (38) 评论 (0) 编辑

[PHP] 浅谈 Laravel Authorization 的 gates 与 policies

摘要:首先要区分 Authentication 与 Authorization,认证和授权,粗细有别。 授权(Authorization) 有两种主要方式,Gates 和 Policies。 Gates 和 Policies 的定义可以类比 Routes 和 Controllers: Gates 通过 回 阅读全文
posted @ 2020-02-29 18:40 ercom 阅读 (22) 评论 (0) 编辑

[FAQ] Smart Contract: xxx has not been deployed to detected network (network/artifact mismatch)

摘要:在前端用 web3 与 contract 交互时,需要获取到已部署的 contract 实例进行操作,如果没有获取到就会报此错。 比如如下的 .deployed() 阶段: /* 伪代码 */ const contractJson = contract(pokerJson) contractJson 阅读全文
posted @ 2020-02-28 21:04 ercom 阅读 (32) 评论 (0) 编辑

[Contract] Solidity address payable 转换与数组地址

摘要:address payable --> address address payable addr1 = msg.sender; address addr2 = addr1; // 隐式转 address addr3 = address(addr1); // 显式转 address --> addre 阅读全文
posted @ 2020-02-27 21:14 ercom 阅读 (22) 评论 (0) 编辑

[Contract] Solidity 变量类型的默认值

摘要:变量的默认值一般都代表 “零值”。 比如 bool 就是 false,uint、int 就是 0,string 就是空字符串。 其它组合的参考 Solidity 判断 mapping 值的存在 Ref:https://solidity.readthedocs.io/en/v0.6.3/control 阅读全文
posted @ 2020-02-26 16:32 ercom 阅读 (31) 评论 (0) 编辑

[Contract] Solidity 遍历 mapping 的一种方式

摘要:思路:为需要遍历的 mapping 再准备一个 list,之后通过 for 循环遍历 list 取得 mapping 的 key。 mapping (address => uint) usersValue mapping (uint => address) list uint length = xx 阅读全文
posted @ 2020-02-25 22:26 ercom 阅读 (80) 评论 (0) 编辑

[Contract] Solidity 判断 mapping 值的存在

摘要:比如 mapping(address => uint) tester,只需要判断 mapping 是否为默认值 0, tester[msg.sender] == 0 "You can think of mappings as hash tables, which are virtually init 阅读全文
posted @ 2020-02-25 17:09 ercom 阅读 (54) 评论 (0) 编辑

统计