blockchain-note

区块链

中本聪2008年发表了《比特币:一种点对点式的电子现金系统》的论文。
以太坊是2013年开创的项目。

区块 账户 共识 智能合约

本质上是一种健壮和安全的分布式状态机,五项核心能力:

存储数据

共有数据

分布式

防篡改与隐私保护

数字化合约

三个方面可信:

数据可信

合约履行

历史可证明

目前典型的区块链账本设计为区块的单链表结构,只有增加没有减少,全局来说只有顺序处理,无法实现并行度。

目前涉及到的知识:分布式 存储 密码学 网络通讯 芯片技术 经济学 法律等。

应用场景

  • 供应链领域

  • 金融领域

  • 政务及公共服务领域

  • 其他领域: 保险防欺诈、大数据安全

原则 面向业务、标准化、松耦合与模块化、安全可审计、简洁与效率。

对 python的认识

1.上下文管理器

with open('data.txt') as source, open('target.txt') as target:
    target.write(source.read())

上下文管理器协议 需要实现 __enter__(), __exit__()


2.装饰器

装饰器本质上就是一个函数,这个函数接收其他函数作为参数,并将其以一个新的修改后的函数进行替换。

import functools
import inspect

def check_is_admin(f):
    @functools.wraps(f)
    def wrapper(*args, **kwargs):
        func_args = inspect.getcallargs(f, *args, **kwargs)
        print func_args
        if func_args.get('username') != 'admin':
            raise Exception("This user is not allowed to get food")
        return f(*args, **kwargs)
    return wrapper


@check_is_admin
def get_food(username, food=’chocolate’):
return “{0} get food: {1}”.format(username, food)


def main():
print get_food(‘admin’)

if __name__ == '__main__':
    main()


装饰器不必检查参数username是基于位置的参数还是基于关键字的参数,而只需在字典中查找即可。

def makebold(fn):
    def wrapped():
        return "<b>" + fn() + "</b>"
    return wrapped

def makeitalic(fn):
    def wrapped():
        return "<i>" + fn() + "</i>"
    return wrapped

@makebold
@makeitalic
def hello():
    return "hello world"

print hello() ## returns <b><i>hello world</i></b>

3.全局变量

4.时间复杂度

list实质上是一个数组

使用链表的时候,应该用collection.deque 双向链表

set的实现是hash标,判断元素是否在某个集合中使用set,时间复杂度低。

5.python中的else

循环使用else 不建议
try…except 中else 建议加else