c语言sscanf函数的用法是什么
304
2022-09-15
简易区块链demo
由于在跟着做实验室的区块链项目,大概是共识锁相关,需要学习区块链相关的开发,自己学习go语言,并实现了一个非常简单的区块链demo。
golang的语法有点意思。
大概是将用户个人信息和会议信息,上一个链节点的hash码等结合并用sha256加密形成一个hash码,用以确认身份/加密。并有相关信息的安全性验证。还有很多功能没有实现,比如工作量证明(PoW),放到web等等。
慢慢来吧。
package main;import( "fmt" "crypto/sha256" "encoding/hex" "math/rand" "time" "strconv")type Block struct{ block_num int; PoW string; time_stamp string; meeting_time string; phone_number string; lock_number string; meeting_name string; room_number string; hash_code string; pre_hash_code string;}func calculate_hash_code(b Block) (string){ data := b.PoW + b.meeting_time + b.phone_number + b.lock_number + b.meeting_name + b.room_number + b.pre_hash_code; h := sha256.New(); h.Write([]byte(data)); hashed := h.Sum(nil); return hex.EncodeToString(hashed);}func genesisBlock() ([10]Block){ var bc [10]Block; bc[0].pre_hash_code = "0000"; bc[0].hash_code = ""; return bc;}func setBlock(oldBlock Block, mt string, pn string, ln string, mn string, rn string) (Block){ var newBlock Block; t := time.Now(); newBlock.block_num = oldBlock.block_num + 1; newBlock.time_stamp = t.String(); newBlock.PoW = proof_of_work(t.UnixNano()); newBlock.meeting_time = mt; newBlock.phone_number = pn; newBlock.lock_number = ln; newBlock.meeting_name = mn; newBlock.room_number = rn; if (len(oldBlock.hash_code) != 0){ newBlock.pre_hash_code = oldBlock.hash_code; } newBlock.hash_code = calculate_hash_code(newBlock); return newBlock;}func proof_of_work(seed int64) (string){ rand.Seed(seed); var rand_num [8]int; var ret string = ""; var i int; for i = 0; i < 8; i++ { rand_num[i] = rand.Intn(10); ret += strconv.Itoa(rand_num[i]); } return ret;}func checkBlock(newBlock, oldBlock Block) (bool){ if (oldBlock.block_num != newBlock.block_num - 1){ return false; } if (oldBlock.hash_code != newBlock.pre_hash_code){ return false; } if (calculate_hash_code(newBlock) != newBlock.hash_code){ return false; } if (newBlock.time_stamp > "2018-10-08"){ return false; } return true;}func main(){ var bc [10]Block = genesisBlock(); var mt = [10]string{"001", "002", "003", "004", "005", "006", "007", "008", "009", "010"}; var pn = [10]string{"18888888888", "18888788888", "18858888888", "18488888888", "18818888888", "18838888888", "18888888488", "18888888088", "18888818888", "18888888882"}; var ln = [10]string{"001", "002", "003", "004", "005", "006", "007", "008", "009", "010"}; var mn = [10]string{"meeting001", "meeting002", "meeting003", "meeting004", "meeting005", "meeting006", "meeting007", "meeting008", "meeting009", "meeting010"}; var rn = [10]string{"201", "202", "203", "204", "205", "206", "207", "208", "209", "210"}; var i int; bc[0] = setBlock(bc[0], mt[0], pn[0], ln[0], mn[0], rn[0]); fmt.Println("{"); fmt.Println(" block:", bc[0].block_num); fmt.Println(" prehash:", bc[0].pre_hash_code); fmt.Println(" hash:", bc[0].hash_code); fmt.Println("}"); for i = 1; i < 10; i++ { bc[i] = setBlock(bc[i - 1], mt[i], pn[i], ln[i], mn[i], rn[i]); fmt.Println("{"); fmt.Println(" block:", bc[i].block_num); fmt.Println(" timestamp:", bc[i].time_stamp); fmt.Println(" proof of work:", bc[i].PoW); fmt.Println(" meeting time:", bc[i].meeting_time); fmt.Println(" phone number:", bc[i].phone_number); fmt.Println(" lock number:", bc[i].lock_number); fmt.Println(" meeting name:", bc[i].meeting_name); fmt.Println(" room number:", bc[i].room_number); fmt.Println(" prehash:", bc[i].pre_hash_code); fmt.Println(" hash:", bc[i].hash_code); fmt.Println(" is safe:", checkBlock(bc[i], bc[i - 1])); fmt.Println("}"); }}
运行结果:
{ block: 1 prehash: hash: 674dbded8e26a61445a776294ddf4d778b67560981ca8065bd1d60faed166848}{ block: 2 timestamp: 2018-09-17 19:40:11.7381493 +0800 CST m=+0.036977201 proof of work: 12207796 meeting time: 002 phone number: 18888788888 lock number: 002 meeting name: meeting002 room number: 202 prehash: 674dbded8e26a61445a776294ddf4d778b67560981ca8065bd1d60faed166848 hash: 0af95460a7df3be7794e18506a578477954808add3bd4b78d36fb36fa013ec97 is safe: true}{ block: 3 timestamp: 2018-09-17 19:40:11.7381493 +0800 CST m=+0.036977201 proof of work: 12207796 meeting time: 003 phone number: 18858888888 lock number: 003 meeting name: meeting003 room number: 203 prehash: 0af95460a7df3be7794e18506a578477954808add3bd4b78d36fb36fa013ec97 hash: 2371fb1166798b102eee5d1a28b4cc0b1b06c813c747d628c19679798c93d6cd is safe: true}{ block: 4 timestamp: 2018-09-17 19:40:11.7381493 +0800 CST m=+0.036977201 proof of work: 12207796 meeting time: 004 phone number: 18488888888 lock number: 004 meeting name: meeting004 room number: 204 prehash: 2371fb1166798b102eee5d1a28b4cc0b1b06c813c747d628c19679798c93d6cd hash: 182f7d63c55c548cbf1892ebba750bdda783b9d13cdc00beb6bf22df3b08858a is safe: true}{ block: 5 timestamp: 2018-09-17 19:40:11.7391488 +0800 CST m=+0.037976701 proof of work: 72828858 meeting time: 005 phone number: 18818888888 lock number: 005 meeting name: meeting005 room number: 205 prehash: 182f7d63c55c548cbf1892ebba750bdda783b9d13cdc00beb6bf22df3b08858a hash: 144118a2070e36e3408b23c19a19ed3e97098ac0b242ab94b21669a913f1adc6 is safe: true}{ block: 6 timestamp: 2018-09-17 19:40:11.742147 +0800 CST m=+0.040974901 proof of work: 68573901 meeting time: 006 phone number: 18838888888 lock number: 006 meeting name: meeting006 room number: 206 prehash: 144118a2070e36e3408b23c19a19ed3e97098ac0b242ab94b21669a913f1adc6 hash: 08cc2fa7ffe1f69df4f28541cc974d57cf15c4736014e704d90558333d4834a0 is safe: true}{ block: 7 timestamp: 2018-09-17 19:40:11.7461444 +0800 CST m=+0.044972301 proof of work: 96622780 meeting time: 007 phone number: 18888888488 lock number: 007 meeting name: meeting007 room number: 207 prehash: 08cc2fa7ffe1f69df4f28541cc974d57cf15c4736014e704d90558333d4834a0 hash: 31c4abe22e8a67fdf02bc0ae3fd11239fd94c36f6e80202ecc16e0cb02b00328 is safe: true}{ block: 8 timestamp: 2018-09-17 19:40:11.757138 +0800 CST m=+0.055965901 proof of work: 69328118 meeting time: 008 phone number: 18888888088 lock number: 008 meeting name: meeting008 room number: 208 prehash: 31c4abe22e8a67fdf02bc0ae3fd11239fd94c36f6e80202ecc16e0cb02b00328 hash: 8e0e2aa828c24719bc438cd03862e8c0de397a9246e5f675126480cfa8be9e38 is safe: true}{ block: 9 timestamp: 2018-09-17 19:40:11.7631337 +0800 CST m=+0.061961601 proof of work: 38904603 meeting time: 009 phone number: 18888818888 lock number: 009 meeting name: meeting009 room number: 209 prehash: 8e0e2aa828c24719bc438cd03862e8c0de397a9246e5f675126480cfa8be9e38 hash: 2e13b0553023d8cfb488019b288b616b210198795afa9f40330c0576dbb6006e is safe: true}{ block: 10 timestamp: 2018-09-17 19:40:11.7671318 +0800 CST m=+0.065959601 proof of work: 33867600 meeting time: 010 phone number: 18888888882 lock number: 010 meeting name: meeting010 room number: 210 prehash: 2e13b0553023d8cfb488019b288b616b210198795afa9f40330c0576dbb6006e hash: 34dfd1cf43c04e2204e90896950f1ab0869de48646c62b118f91e85c6b36832e is safe: true}
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~