- 博客(8)
- 收藏
- 关注
原创 Python3中的yield的用法/解析
参考自任何使用yield的函数都称之为生成器,生成器这个概念就不多说了。例子例子1 * 计数器def count(n): while n > 0: # 迭代器返回n yield n # 下一次迭代器开始的地方 n -= 1for i in count(5): print(i)例子2 * 斐波拉契数列def fibonacci(): a = b = 1...
2018-12-10 22:00:23 4293
原创 环签名(Ring signature)
参考自环签名指的是在n个公钥中隐藏自己拥有私钥的那个公钥,具体应用就在于区块链上隐藏交易发送人(地址/公钥)。准备首先定义以下函数,其中EkE_{k}Ek为对称加密算法,k为EkE_{k}Ek对应的对称密钥Ck,v(y1,y2,…,yn)=Ek(yn⊕Ek(yn−1⊕Ek(⋯⊕Ek(y1⊕v)… )))=v{\displaystyle C_{k,v}(y_...
2018-12-09 23:16:51 15837
原创 区块链中的隐地址(stealth addresses)
Alice生成一个Bob才能有私钥的隐地址(公钥T),两者不需要交互。R需要在交易中被附上。推导:T=B+Hash(rV)G=B+Hash(rvG)G=B+Hash(vR)G=bG+Hash(vR)G=(b+Hash(vR))GT = B + Hash(rV)G = B + Hash(rvG)G \\ = B + Hash(vR)G = bG + Hash(vR)G \\ = (b+Hash...
2018-12-09 17:57:56 1624 2
原创 以太坊合约地址的生成方式
目前CreateAddress,以太坊的地址取决于部署合约的人的地址,当前区块链上部署者的nonce(=该部署交易的nonce)。地址生成函数// CreateAddress creates an ethereum address given the bytes and the noncefunc CreateAddress(b common.Address, nonce uint64) c...
2018-12-03 00:11:40 6087 1
原创 golang中switch的用法
package mainimport ( "fmt")func main() { ids := []int{1, 2, 3, 4, 5, 6} for i := range ids { switch id := ids[i]; id { case 1: fmt.Println("Hit id 1!") case 2, 3: fmt.Println("Hit...
2018-12-02 23:52:55 599
原创 golang如何获取变量的类型
package mainimport ( "reflect" "fmt")type Info struct { id int name string}func getType1(v interface{}) string { return fmt.Sprintf("%T", v)}func getType2(v interface{}) string { retu...
2018-12-02 17:44:57 2786
原创 golang中的闭包的意义和用法
什么是闭包?Go 函数可以是一个闭包。闭包是一个函数值,它引用了函数体之外的变量。 这个函数可以对这个引用的变量进行访问和赋值;换句话说这个函数被“绑定”在这个变量上。我的不靠谱的理解,一个闭包相当于一个类的实例,函数体之外的变量相当于这个实例存储的变量。没有闭包的时候,函数就是一次性买卖,函数执行完毕后就无法再更改函数中变量的值(应该是内存释放了);有了闭包后函数就成为了一个变量的值,只要...
2018-12-02 16:54:29 8329 1
原创 golang的for range原理以及引致的一些奇怪问题
基本用法下述两个函数test1与test2运行结果有何区别?func test1() { intArray := []int{1, 2, 3, 4} for _, val := range intArray { val++ } // 仍然为[1, 2, 3, 4] fmt.Println(intArray)}func test2() { intArray := []int...
2018-12-01 11:39:02 1857
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人