https://hackernoon.com/your-private-solidity-variable-is-not-private-save-it-before-it-becomes-public-52a723f29f5e
上面範例中,play(100)被呼叫後,從transcation data內得知
0x6587f6ec0000000000000000000000000000000000000000000000000000000000000064
然後先取得play()這部份的data
bytes4(keccak256(‘play(uint)'))
然後得知 0000000000000000000000000000000000000000000000000000000000000064 就是 uint部份,得到的這個值是經過hex才顯示的
byte32:00 為1個byte(16 bits),共32個
64=> 6 * (16^1) + 4 * (16^0) = 100
uint256 => 2^256 => 8^32 => byte32
https://github.com/poanetwork/blockscout/tree/master/docker
https://embark.status.im/docs/cockpit_dashboard.html
https://ywnz.com/linuxjc/2024.html
在Ubuntu Server 18.04 LTS下遇到了sudo速度非常慢的问题,具体表现是在提交命令之后大概需要10秒左右才有输入sudo密码或者开始运行,su命令同样也非常慢。这在升级前使用Ubuntu Server 16.04 LTS并没有,显然可能是Ubuntu Server 18.04 LTS版本的问题。
问题的原因
Ubuntu Server被设计成一种类似于分布式的操作系统网结构,允许/etc/sudoers中的成员不在本机上。从而sudo时会先从网络上寻找可能的sudoer然后才是本地,而这10s左右的时间就是整个DNS流程的最长时间。
解决办法
首先输入hostname,得到本机当前的互联网名称(大概跟windows下的计算机名称差不多)。然后使用su或sudo打开/etc/hosts,添加一行:
127.0.0.1计算机名计算机名.localdomain
关闭并保存。这样处理后sudo速度恢复正常。
1、用docker-machine建立開發環境 (VM),vm內的docker 環境是完整的,自己灌很浪費時間
http://sueboy.blogspot.com/search/label/docker-machine
然後 記得vm裡面跑 portainer.io 管理docker用,web介面
會省下你一大堆時間!
以上這個步驟是快速建立可以跑docker環境,然後又可以用圖形管理看log、砍image等等
2、docker 一般操作網路上都有,一定要看,就算有圖形化介面,有些時候你還是需要指令
記得一件事,要學docker-compose,然後基本上專案用docker,更正確來說,是要會用、會寫docker-compose
docker-compose 會比 單純用docker,好用很多
http://sueboy.blogspot.com/2018/12/ethereum-poa-docker-compose-docker.html
3、注意iptables,用docker後,常常會碰到iptables的問題,網路有問題,不能連,連不上,解答:把docker服務重開,就會重新設定iptables…這一堆人死在這上面
如果docker服務重開後,網路還是不行,我建議是用docker-machine重建一台vm比較快,再用docker-compose重新執行,比較快,省時間
4、通常用了docker的後端,十之八九就會想上K8s (kubernets)
到這階段就是超級大坑了!!!
非常大的坑! 會死人的坑! 到這階段千萬要避開,一定要避開!
坑指自架
npm install –global windows-build-tools
https://www.npmjs.com/package/windows-build-tools
https://stackoverflow.com/questions/32457761/how-to-solve-node-gyp-rebuild-issue-on-windows-10
What this Error? Example:
transaction A get nonce 1
transaction B get nonce 2
transaction C get nonce 3
But blockchain package B、C first, then package A. If happen this step, get error.
With truffle? Because
Normal
const wallet = new HDWalletProvider(mnemonic, url, id); const AContract = new TruffleContract(Json_contract); AContract.setProvider(wallet); wallet.addresses[] AContract. use contract api Sometime you call contract “set/write” api two times.
Example:
Create contract first. Write data into contract second.