https://github.com/knownsec/Ethereum-Smart-Contracts-Security-CheckList/blob/master/%E4%BB%A5%E5%A4%AA%E5%9D%8A%E6%99%BA%E8%83%BD%E5%90%88%E7%BA%A6%E5%AE%A1%E8%AE%A1CheckList.md#11-%E6%9C%AA%E5%88%9D%E5%A7%8B%E5%8C%96%E7%9A%84%E5%82%A8%E5%AD%98%E6%8C%87%E9%92%88 https://www.chaindd.com/3102377.html https://blog.b9lab.com/storage-pointers-in-solidity-7dcfaa536089 https://medium.com/loom-network/ethereum-solidity-memory-vs-storage-how-to-initialize-an-array-inside-a-struct-184baf6aa2eb Use delete or new

繼續閱讀

Use https://remix.ethereum.org Get Contract json and data. In remix website, Compile finish. See Compliation Details. 1. ABI: click ABI buttion, get data. Use http://jsonviewer.stack.hu/ remove space 2. Compliation Details -> WEB3DEPLOY -> get data 3. cContract.options.from need put correct. var Web3 = require("web3"); var provider = new Web3.providers.HttpProvider("http://ganache:8545"); var web3 = new Web3(provider); //abi var cContract = new web3.eth.Contract([{"constant":false,"inputs":[{"name":"x","type":"uint256"}],"name":"set","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"get","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"}]) //bytecode cContract.options.data = '0x608060405234801561001057600080fd5b5060bf8061001f6000396000f30060806040526004361060485763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166360fe47b18114604d5780636d4ce63c146064575b600080fd5b348015605857600080fd5b5060626004356088565b005b348015606f57600080fd5b506076608d565b60408051918252519081900360200190f35b600055565b600054905600a165627a7a72305820765480c908e5e28e3233e18bfa422944b42cad5fc08b77d7b22d3ddd7016a1380029' cContract.options.from = '0xoooxxxoooxxxoooxxxoooxxxoooxxx' cContract.options.gas = '4700000' console.

繼續閱讀

HDWalletProvider engine.stop() p = HDWalletProvider(MNEMONIC_SYSTEM, "http://ganache:8545", 0); p.engine.stop(); HDWalletProvider engine.stop() and pool export function GetHdProvider(id: number, rpcurl: string) { //return new HDWalletProvider(MNEMONIC_SYSTEM, url, id); return id==0?Provider1Pool.acquire():Provider2Pool.acquire(); } // Normal use const hdProvider0 = await GetHdProvider(0, providerUrl).then(function(client) {return client}).catch(function(err) {throw new HttpException(err.toString(), HttpStatus.BAD_REQUEST);}); const hdProvider1 = await GetHdProvider(1, providerUrl).then(function(client) {return client}).catch(function(err) {throw new HttpException(err.toString(), HttpStatus.BAD_REQUEST);}); // Normal release ReleaseHDProvider1(hdProvider1 ); // Pool code const genericPool = require("generic-pool"); const opts = { max: 10, // maximum size of the pool min: 2, // minimum size of the pool idleTimeoutMillis: 30000, log: true }; const factory0 = { // maybe different parms create: function() { return new HDWalletProvider(MNEMONIC_SYSTEM, RPCURL, 0); }, destroy: function(client) { client.

繼續閱讀

Project專案

‎Triton Ho‎ https://www.facebook.com/groups/616369245163622/permalink/1736421439825058/ 今天不寫發大財的事,直接寫一下project planning的雜感好了。 —————————————————————————————————————————————————————— 最兇險的專案不是那些deadline定得很趕的專案,而是那些沒有deadline的專案! 別以為「沒有deadline」是真的沒有deadline耶。 你想一下,跟你大大聲說「錢不是問題的人」,最終有120%是「反正我又沒錢,錢當然不是問題啊~」。 公司不是做慈善的,也不是給工程師來試新玩具的。所有的專案,最終還是要談C/P值。 (再次一句:工程就是來談C/P的,不談C/P請去當藝術家) 所謂「沒有deadline」,這很可能代表…… A) 你的主管現在忙別的專案管理,暫時沒空管這專案。 (然後等他有空回來看這專案時,就會問為何拖這麼久還結不了案了) B) 你沒法拒絕其他人的需求改動。(背景聲:反正沒deadline,改一下需求去做得更好吧) C) 你沒法有效限制專案的複雜性,大量的over-engineering。(背景聲:反正沒deadline,寫得好一點/多留一點空間,這樣子未來才容易維護嘛) A+B+C的後果是……老闆過了三個月,突然有空來看看大家做什麼時,發現這專案已經過了二個月還沒有做完。 然後要求:都做了三個月了,現在再給你二星期時間來結案耶! 結果是: 要麼結不了案,投入大量心力的專案成為上不了市場的垃圾。 要麼是勉強能結案,但是有大量的over-engineering和一堆因為需求改了又改下不好的程式加構。 —————————————————————————————————————————————————————— 雖然一堆入市未深的工程師整天會罵專案deadline為何定得那麼硬,一天都不能改…… 但是嘛,先不談專案,我們談一下去旅行好了。 去旅行嘛,第一件事當然是跟公司申請休假,然後把信用卡丟給另一半叫她幫忙規劃(註:這是高度危險動作,好孩子絕對別學)。 http://xn--axxxx-fg1h292av9ap80aa49or2n76lzmxyz1bcr7i.com/,sxxxxxxxxx.com,txxxxxxxxxx.com上天天比價比優惠看旅行遊記的生活~ 然後如果沒定下死線?應該我進棺材那一天還是在計劃行程中~ (謎之聲:某人站在你身後,她看起來很火……) 計劃行程的死線能不能改?當然不行,公司休假可是改不動啊!!! 回到公司專案,為何公司死線定得那麼硬,很多時候都是跟業務宣傳/合約罰款有關的。 你想像一下,一個手游專案要上市,當然不是先等程式完成後才慢慢宣傳衝人氣的。 一個遊戲要上市,當然是先定好上市日期,然後預先數月就要慢慢地製造話題,找人來做宣傳,一步一步炒熱氣氛。 然後人氣炒到最高點,玩家的期待度到達最大時,遊戲同步開賣大賺特賺那一波。 如果突然發現有bug,遊戲要延期一個月? sorry囉,遊戲消費是不理性的,過了那一波熱潮,本來會付錢的玩家們早就付給另一個遊戲了。 讓話題多炒熱一個月去等bug先修好? 你以為是炒青菜,你想炒多久就多久嗎? 先不談熱度能否額外維持一個月還不消散。但是,高人流的宣傳管道,網上KOL,不是你想付錢就能立即買到的! 如果你沒法如期把遊戲上市,那麼你這個遊戲很可能就賠本賠很很大囉。 —————————————————————————————————————————————————————— 專案deadline不能改,商業社會就是這樣子了。 追求要完美的,你應該去當藝術家不是當工程師的。 怎去在deadline前做完專案,固然跟你是否有留下足夠的buffering有關。 但是,這跟你的專案怎計劃也有很大關係的。 上古時期,有一堆人(CMMI)覺得,只要把文件寫得好,每一個專案把工序所用的時間都記錄下來。 然後你就能越來越變得成熟,能很精準地預估下一個專案所需時間了~ 然後這些CMMI人大約會覺得:把台北的象山步道走100次,就能很精準地預估爬玉山攻項要多少時間了(笑~) (香港版本:走城門水塘100次,就能預估蚺蛇尖攻項要多少時間了) 會行山的人都知道: 地圖/網上文章只能給你一個很基本的大概,一個路線最終要用多少時間/體力,你只能親自走一次才能答出來。 然後嘛…… 很多表面上看起來相同的軟體專案,真正做下去時才發現是全新的未知領域…… —————————————————————————————————————————————————————— 如果專案deadline不能改,那麼能改的就是:軟件的質素了。 以去旅行為例: 如果你有非常充份的時間,你買機票時大可以找不同銀行的信用卡優惠,看看飛行里數計劃,看看連同旅行一起訂的優惠…… 如果沒時間,http://xn–skyxxxxxxx-rl5q.com/,輸入出發和回程時間,那一家最便宜就按下去算了。 一個能賣錢的軟體專案,正常應該可以再拆分為多個sub-task和milestone的。 重點: 首先開始做的,應該是最困難/你最沒法預估開發難度的工作。 A) 專案越早階段要改動上市日期,你能成功改動宣傳計劃的可能性就越高。 B) 越早發現專案進度不理想。之後比較容易的sub-task,你還是能以減少testcase coverage,刪掉不重要功能這些手段去追回進度。 如果你把困難而且必要的工作放在最後才做,那麼任何的預估錯誤就是專案延期囉~ (註1:一堆人覺得堅持一定要先寫testcase才能寫程式的……要麼他真的很幸福沒遇上過要衝死線的專案,要麼他活在童話世界……)

繼續閱讀

https://play.golang.org/p/i90_qsN2Sz- package main import ( "fmt" "encoding/hex" ) func main() { id := "0x1dd84569ad60faa1b6838526ba7156388cf7c8d376ed0ccda9bce0419c2c3519" fmt.Printf("Ori ID: %v \n\n", id) fmt.Printf("Ori ID[2:]: %v \n\n", id[2:]) byteid := []byte(id) fmt.Printf("===== Byte id ===== Decimal \n") fmt.Printf("Byte ID: %v \n", byteid) fmt.Printf("Byte ID 0x%x \n\n", byteid) fmt.Printf("===== Decode(Byte id[2:]) ===== Decimal HEX \n") byteid = []byte(id[2:]) fmt.Printf("Byte ID: %v \n", byteid) fmt.Printf("Byte ID 0x%x \n\n", byteid) n, _ := hex.Decode(byteid, byteid) fmt.Printf("Byte ID[2:]: %v \n", byteid) fmt.

繼續閱讀

https://segmentfault.com/a/1190000020329813 1.什么是JWT JWT(JSON Web Token)是一个非常轻巧的规范,这个规范允许我们使用JWT在用户和服务器之间传递安全可靠的信息, 一个JWT由三部分组成,Header头部、Claims载荷、Signature签名, JWT原理类似我们加盖公章或手写签名的的过程,合同上写了很多条款,不是随便一张纸随便写啥都可以的,必须要一些证明,比如签名,比如盖章,JWT就是通过附加签名,保证传输过来的信息是真的,而不是伪造的, 它将用户信息加密到token里,服务器不保存任何用户信息,服务器通过使用保存的密钥验证token的正确性,只要正确即通过验证, 2.JWT构成 一个JWT由三部分组成,Header头部、Claims载荷、Signature签名, Header头部:头部,表明类型和加密算法 Claims载荷:声明,即载荷(承载的内容) Signature签名:签名,这一部分是将header和claims进行base64转码后,并用header中声明的加密算法加盐(secret)后构成,即: let tmpstr = base64(header)+base64(claims) let signature = encrypt(tmpstr,secret) //最后三者用".“连接,即: let token = base64(header)+”."+base64(claims)+"."+signature

繼續閱讀

作者的圖片

Sue boy

Sueboy Can support You

CIO

Taiwan