P r o o f - o f - S t a k e 区 块 链 共 识 算 法
音标中文谐音表

/i:/ bee/bi:/ feet/fi:t/ keep/ki:p/ key/ki:/ team/ti:m/ meet/mi:t/ /i/ it /it/ big/big/ city/siti/ give/giv/ sick/sik//e/ get/get/ best/best/ text/tekst/ help/help//æ/ fat/fæt/ have/hæv/ cat/kæt/ back/bæk/ hat/hæt//a:/ laugh/la:f/ glass/gla:s/ half/ha:f/ farm/fa:m/ park/pa:k// ɔ:/ horse/hɔ: s/ saw/sɔ:/ corn/kɔ:n/ course/kɔ:s/ salt/sɔ:t// ɔ / dog/dɔg/ pot/pɔt/ cost/kɔst/ what/wɔt/ honest/′ɔnist//u:/ food/fu:d/ moon/mu:n/ rule/ru:l/ loose/lu:s/ noon/nu:n//u/ book/buk/ put/put/ good/gud/ would/wud/ could/kud// ʌ / must/mʌst/ does/dʌz/ money/′mʌni/ ugly/′ʌgli/ come/kʌm//ə:/ nurse/nə:s/ bird/bə:d/ burn/bə:n/ turn/tə:n/ girl/gə:l//ə / better/betə/ never/nevə/ worker/wə:kə/ welcome/welkəm//ei/ may/mei/ name/neim/ game/geim/ eight/eit/ age/eidʒ//əu/ no/nəu/ home/həum/ hope/həup/ wrote/rəut/ note/nəut/ pose/pəuz//ai/ eye/ai/ time/taim/ buy/bai/ right/rait/ bike/baik/ kite/kait//au/ now/nau/ out/aut/ how/hau/ about/ ə′baut/ south/sauθ/ house/haus/ /ɔi/ boy/bɔi/ toy/tɔi/ noise/nɔiz/ voice/vɔis/ point/pɔint//iə/ ear/iə/ near/niə/ idea/ai′diə/ hear/hiə/ mere/miə/ spear/spiə/ /εə/ air/εə/ tear/tεə/ care/kεə/ dare/dεə/ fair/fεə/ there/ðεə//uə/ tour/tuə/ poor/puə/ sure/ʃuə/ moor/muə/(停泊) your/juə//p/ pea/pi:/ pie/pai/ top/tɔp/ cap/kæp/ people/pi:pl/ pride/praid//b/ bee/bi:/ by/bai/ buy/bai/ black/blæk/ bear/bεə//t/ let/let/ sat/sæt/ feet/fi:t/ team/ti:m/ tide/taid//d/ led/led/ sad/sæd/ feed/fi:d/ do/du:/ dear/diə//k/ lack/læk/ take/teik/ clock/klɔk/ class/kla:s/ weekend/′wi:kend//g/ big/big/ lag/læg/ glass/gla:s/ gum/gʌm/ good/gud/ guest/gest//f/ face/feis/ fast/fa:st/ leaf/li:f/ surf/sə:f/ favorite/′feivərit//v/ very/′veri/ five/faiv/ fever/′fi:və/ serve/sə:v/ never/′nevə//θ/ bath/ba:θ/(v洗澡) thick/θik/ mouth/mauθ/ breath/breθ/(n呼吸) /ð/ the/ ðə/ they/ðei/ that/ðæt/ mother/′mʌðə/ thus/ ðʌs/ then/ðen//s/ face/feis/ mouse/maus/ cakes/keiks/ caps/kæps/ likes/laiks//z/ close/kləuz/ keys/ki:z/ boys/bɔiz/ pens/penz/ halves/ha:vz//tʃ/ catch/kætʃ/ cheep/tʃi:p/ rich/ritʃ/ watch/wtʃ/ child/tʃaild//dʒ/ orange/′ɔridʒ/ large/la:dʒ/ juice/dʒu:s/ job/dʒɔb//tr/ tree/tri:/ try/trai/ true/tru:/ trouble/traubl/ track/træk//dr/ dry/drai/ dream/dri:m/ dress/dres/ drink/driŋk/ hundred/′hʌndrid//ʃ/ she/ʃi:/ sharp/ʃa:p/ fish/fiʃ/ shock/ʃɔk/ shoe/ʃu://ʒ/ pleasure/′pleʒə/ measure/′meʒə/ television/′teliviʒən//ts/ let′s/lets/ sports/spɔ:ts/ puts/puts/ writes/raits/ seats/si:ts//dz/ hands/hændz/ birds/bə:dz/ friends/freindz/ beds/bedz//h/ he/ hi:/ hard/ha:d/ him/him/ heard/hə:d/ half/ha:f//l/ like/laik/ late/leit/ learn/lə:n/ lead/li:d/ light/lait//m/ my/mai/ more/mɔ:/ seem/si:m/ meat/mi:t/ mind/maind/ men/men//n/ nice/nais/ wind/waind/ mind/maind/ rain/rein/ fine/fain//ŋ/ sing/siŋ/ wing/wiŋ/ ring/riŋ/ long/lɔŋ/ beautiful/bju:təfl//j/ you/ju:/ few/fju:/ yard/ja:d/ music/′mju:zik/ student/′stju:dnt//w/ work/wə:k/ way/wei/ well/wel/ what/wɔt/ twelve/twelv/ twin/twin/ /r/ red/red/ road/rəud/ write/rait/ wrong/rɔŋ/ problem/′prɔbləm/附:常见的字母与字母组合发音规则元音字母及元音字母组合拼读规则元音字母的发音元音字母a重读开音节 [ei] paper ; late ; make ; lake ; face重读闭音节[æ] bag ; fat ; cat ; lad der ; mass(*例外:any一些[e] ;many许多[e])非重读音节 [ə]或[i]即:[ə]—— ago ; along ; among ; above ; aloud[i]—— comrade ; village ; manager ; palace ; private ;necklace*连续相同的辅音(字母),一般只发一个音,而且归属后一个音节段。
医学拉丁语第一课一、字母的名称和...

医学拉丁语第一课一、字母的名称和发音字母名称音发音大写小写国际音标国际音标A a /ɑ:/ /ɑ:/B b /be/ /b/C c /tʃe/ /k/,/tʃ/D d /de/ /d/E e /e/ /e/F f /ef/ /f/G g /dʒe/ /g/,/dʒ/H h /hɑ:/ /h/I i /i:/ /i:/,/i/J j /jɔ:t/ /j/K k /kɑ:/ /k/L l /el/ /l/M m /em/ /m/N n /en/ /n/O o /ɔ:/ /ɔ:/,/ ɔ/ P p /pe/ /p/Q q /ku:/ /k/R r /er/ /r/S s /es/ /s/T t /te/ /t/U u /u:/ /u:/,/u/ V v /ve/ /v/W w /′du:pleksve/只用于人名X x /iks/ /ks/Y y /ipsi′lɔŋ//i:/Z z /′zetɑ://z/二、字母的分类拉丁语字母分为元音字母和辅音字母,又分别为单元音字母和双元音字母;单辅音字母和双辅音字母。
元音字母单元音 a e i o u y双元音ae oe au eu辅音字母单辅音b e d f g h j k l m n pq r s t v x z双辅音ch ph rh th三、双元音字母和双辅音字母的发音1、双元音字母的发音:ae/e/ oe/e/ au/ɑu/ eu/eu/2、双辅音字母的发音:ch/k/ ph/f/ rh/r/ th/t/例如:aegrotus病人oedema水肿chloridum氯化物camphora樟脑四、某些字母的发音规则大部分拉丁语字母在单词中就读其发音,如:tabella(片剂)读作/t ɑ:′belɑ:/。
但有些字母由于在单词中所处的位置不同而有不同的发音。
有些发音规则需强记。
1、c①在辅音字母和元音字母a、o、u、au前及在一个音节末时,c 发/k/的音。
如:capsula胶囊coccus球菌causa原因②在e、i、y、ae、oe、eu、前,c发/tʃ/的音。
嵌入式操作系统_第3章 任务结构、状态、优先级、代码结构、任务控制块及链表、任务堆栈

从应用程序设计的
角度来看, μC/OS-II的任务就 是一个用户编写的 C函数和与之相关 联的一些数据结构
内存
在内存中应该 存有任务的代 码和与该任务 配套的堆栈
任务代码 任务堆栈
而构成的一个实体。
进程的状态
运行态 就绪态 等待态(阻塞态)
程序通过访问它来了解CPU的利用率, 所以这个系统任务OSTaskStat( )叫做 统计任务
任务及的优优先先级权别 用O常明常使O个固O应把计别OSSSS户_数应数用_定_用优任是_CLLL可F用一的OO地O程先务:OGWSWW权 一 表 优 则 低以.程旦优E_μ,E序级,E0HSLCSS,个先表分 示根序被先T中O系T中别因T/_W__1O级级示为 。据中定级P通E统P还此PO,SRSRRS别别任应任义I过T数6_总I使用I2_O_4IOO…L用务,为给P,I务都最字个是用户自-ORO1W把程优则:表I共把了任动S个E的用高优0O_S表任序先意示赋0O最统务赋LT优一,先S,O_示务的级味最_值低计可给WP先个数级L1ER需别着低O,的任的优任以空SIW级数字别TO要的系优E2方务优先务使闲_-S,别字P1越,,数 统先T法级, 用任R自的先_…I越来大每在目中级P,别系的务O动R…-文。可别I来统优。2赋O,,件该供的+说则先如给1共会级果统
任当务控应制用块结程构序的主调要用成员函数OSTaskCreate( )
任务及控任制务块控(O制S_块TC链B)表 t…y创统进任务控这表…pOssIII数具链的表…etNNtNdrr…S建函行务控制个的TTTuue任_会有接任。fcc188Stts任 任 制 认务6UUT一数初从制块任头μ栈务理控tooUr当由按相为务即Kuss控__c个始空块各务部O务务块和ttt制C的*指有制cc进于用应一,相oSObbOOOs/块任化任,个控T_S**SSS控的的管行这户数个故当t针关优OT块OOC链TTTcbC务。务然成制BCCSCSS表系 些提量链这于BTT{BBBI制 身 任理、的先-SCCDPS时这控后员块ntItBBr统任供的表个是lkiayi块 份 务的PNPot任 属级I;,个制用进链t;;rte初务的任。链一re用x///;vt///就 证 是这函块任行入(任任任/;;务 性别//始控任务表些指///指务务务来指个数链务赋到)向相 , 不的 的化制等向务控叫空等的的向来任记函首表的值任后待当优前时块数制做白当 没 能务为当 表一一的前先一空数先获属,务堆录,还个为块空的时状级个任任于 有 被栈前 就些会为取性最控任限态别任务初没系并任身任栈务务标(务是 任 系控状 叫与调 被 一对 后 制顶始有控统把务 份志节控控制务的用创个任再块制拍一务统制态做任块化对创它块证指制块数块的链系建任务把链针个控承函应的建们链。)、任务的块表指堆指任管务针针
一年级上册语文生字带拼音组词可打印(下载)

一年级上册语文生字带拼音组词可打印(下载)一年级上册语文生字带拼音组词《金木水火土》yī一(一个)(一人)(一只)èr 二(二手)(二月)(二人)sān 三(三天)(三个)(三年)shànɡ上(上下)(上车)(上山)(上来)《口耳目》kǒu 口(人口)(出口)(门口)(开口)(口水)mù目(头目)(耳目)(目中无人)(书目)ěr 耳(木耳)(耳目)(耳朵)(中耳)shǒu 手(手巾)(手电)(手心)(手足)《日月水火》rì日(日子)(日月)(今日)(日本)tián 田(水田)(田里)(田地)hé禾(禾田)(禾苗)huǒ火(火车)(上火)(水火)(生火)(大火)《对韵歌》chónɡ虫(飞虫)(虫子)(虫牙)yún 云(白云)(乌云)(一片云)shān 山(大山)(山羊)(上山)(下山)(火山)《园地一》bā八(八个)(八天)(八月)(八方)shí十(十个)(十天)(十年)(十月)《秋天》le 了(走了)(来了)zǐ子(儿子)(日子)(口子)(天子)rén 人(人口)(大人)(人中)(人生)(人力)dà大(大小)(大人)(大米)(大方)《小小的船》yuè月(月牙)(日月)(半个月)(十月) ér 儿(儿子)(少儿)(女儿)tóu 头(木头)(开头)(心头)(个头)(头皮) lǐ里(心里)(手里)(里头)(公里)《江南》kě可(可口)(认可)(可以)dōnɡ东(东西)(东方)(东风)xī西(东西)(西方)(西风)《四季》tiān 天(今天)(天上)(天下)(天文)(天平) sì四(四个)(四天)(四年)(四月)shì是(不是)(可是)(是的)《园地四》nǚ女(女儿)(母女)(女生)(女人)kāi 开(开门)(开水)(开心)(开口)(开车) 《画》shuǐ水(水果)(水田)(水车)(水平)qù去(出去)(回去)(来去)(去处)lái 来(回来)(来电)(本来)(出来)bù不(不行)(不见)(不公平)(不三不四) 《大小多少》xiǎo 小(大小)(小米)(小鸟)(小子)shǎo 少(少了)(少见)(少儿)(少年)niú牛(牛羊)(牛毛)(牛皮)(小牛)ɡuǒ果(水果)(瓜果)(果皮)(果子)niǎo 鸟(小鸟)(飞鸟)(鸟儿)《小书包》zǎo 早(早上)(早日)(早安)shū书(书本)(书皮)(书生)dāo 刀(大刀)(小刀)(刀子)chǐ尺(尺子)(米尺)(公尺)běn 本(书本)(本子)(本来)(本人)《日月明》mù木(木头)(木门)(木马)(木工)lín 林(林子)(山林)(丛林)(林地)tǔ土(风土)(土山)(土里)lì力(用力)(电力)(出力)(火力)xīn 心(开心)(用心)(手心)(小心)《升国旗》zhōnɡ中(中文)(中心)(中年)(人中)(中午) wǔ五(五天)(五年)(五月)(一五一十)lì立(立正)(自立)(起立)(立定)zhènɡ正(公正)(正门)(正方)(立正) 《影子》zài 在(正在)(不在)(在哪)hòu 后(后果)(后来)(后面)(前后)wǒ我(我们)(我的)hǎo 好(好人)(好比)(只好)(正好)《比尾巴》chánɡ长(长年)(长江)(太长)bǐ比(比一比)(好比)(对比)bā巴(下巴)(大巴车)(中巴车)bǎ把(一把刀)(火把)《青蛙写诗》xià下(上下)(下车)(下山)(下来)ɡè个(几个)(半个)(两个)yǔ雨(雨水)(下雨)(风雨)(雨衣)men 们(他们)(她们)(我们)《雨点儿》wèn 问(问好)(学问)(问号)yǒu 有(有无)(有名)(没有)(只有)bàn 半(半个)(半天)(半年)(一半)cónɡ从(从前)(从来)(从此)(从小)nǐ你(你们)(你好)(你的)《明天要远足》cái 才(人才)(天才)(才干)(才华)mínɡ明(明天)(明白(明日)tónɡ同(合同)(共同)(同学)(一同)xué学(放学)(同学)(学会)(学习)《大还是小》zì自(自己)(自大)(自来水)(自由)jǐ己(自己)yī衣(毛衣)(大衣)(皮衣)(风衣)《项链》bái 白(白天)(白云)(白马)(白开水)de 的(好的)(高高的)yòu 又(又一个)(又一天)(又是)hé和(和平)(和气)(和风)(和声)《雪地里的小画家》zhú竹(竹子)(竹叶)(竹林)(竹园)yá牙(门牙)(牙口)(月牙)(出牙)mǎ马(马车)(木马)(马上)(白马)yònɡ用(用心)(用力)(公用)(不用)jǐ几(几个)(几天)(几年)《乌鸦喝水》zhǐ只(只有)(只要)(只是)(只好)shí石 (石头)(石子)(石块)(石油)duō多(多少)(多年)(多心)(不多)chū出(日出)(出来)(出入)(出口)(出门)jiàn 见(会见)(再见)(开门见山)(不见)《小蜗牛》duì对(对面)(对立)(对白)(对方)mā妈(妈妈)(大妈)(奶妈)quán 全(大全)(齐全)(完全)huí回(回去)(回家)(回来)(回头)《园地八》ɡōnɡ工(工人)(工作)(工业)(工厂)(工业)第一单元知识点归纳一、我会读1.重点字天地人你我他一二三四五上下口目耳手足站坐日月水火山石田禾对云雨风花鸟虫六七八九十2.易读错的字四个 sì三月 sān 上天 shàng小手 xiǎo 虫子 chóng 足球 zú坐下 zuò站立 zhàn 水池 shuǐ二、我会写1.重点字一二三上口目耳手日田禾火虫云山八十2.重点词语一二三九上古门口耳目手足日光田地禾苗火车虫子云朵山川八方十分3.形近字组词三、词语积累1.近义词站——立行——走卧——躺2.反义词上——下大——小今——古站——坐天——地四、背诵1.站如松,坐如钟。
八年级英语下册教学课件《Unit 5 第3课时(B 1a-1d)》

3. Which team won at the event? _J_o_h_n_’_s_t_e_a_m__w_o_n_._______________________
1b Listen and write short answers to the questions.
1. What event happened at the school yesterday? _T_h_e_r_e__w_a_s_a__b_a_s_k_e_tb_a_l_l_c_o_m__p_e_ti_ti_o_n_.________
realize
意识到; 我没有意识到天有多么晚。
理解
I didn’t realize how late it was.
认出; recognize 辨别出
我听出了他的声音。 I recognized his voice.
know
知道; 我知道她反对我们。 了解 I know she was against us.
a party
STohme ereeavseonntswyhoyu Imwaaysblaetleatfeorfoorr couldn’t go to an event is…
Last …, I was late for/ couldn’t go to… I was late/ couldn’t go because…
While she was running back home…
While she was running back home, she saw a dog _b_y__th_e__s_id_e__o_f _th__e_r_o_a_d_ and it _w__a_s_h_u_r_t__.
区块链导论-第三章

y3 (x1 x3
x2 3x12
x1 a
2 y1
,P Q ,P Q
可证明E中的点在该运算下构成了Abel群,其单位元为O。对于E中
的元素 x, y ,其逆元为 x, y x,y 。
区块链导论
16
椭圆曲线密码算法
来验证某一数据块是否存在于这一Merkle树中。
区块链导论
14
3.3 公钥密码算法
区块链导论
公钥密码算法
公钥密码算法,又称为双密钥密码算法或非对称密码算法。公钥 密码系统使用两个不同的密钥,包括公钥和私钥两种,公钥是指 公开的密钥,私钥是指非公开、私有的密钥。通常情况下,发送 者通过公钥对信息进行加密,接收方通过私钥对接收到的加密信 息进行解密。
椭圆曲线及其解点的运算的几何意义如下图所示。设 Px1, y1 Q和x2, y2 是椭圆曲线的两个点,则连接 Px1, y1 和 Qx2, y2 的直线与椭圆曲线 的另一个焦点关于横轴的对称点即为Px1, y1+Qx2, y2 点。
区块链导论
17
椭圆曲线密码算法
2. 椭圆曲线密码:椭圆曲线密码建立在椭圆曲线解点群的离散对 数问题的困难性上,椭圆曲线离散对数问题描述如下:给定群中的 点P与点Q,在等式 kP=Q中,已知k和点P求点Q较为容易,而已知 点Q和点P求k却十分困难。椭圆曲线密码算法正是基于离散对数问 题,例如:使用Q为公钥,k为私钥。
区块链导论
3
哈希算法
特点
单向性:对于给定的哈希值h,要找到m'使得h=H(m’)计算上 是不可行的。
易压缩:对于任意大小的输入m,哈希值h的长度都很小且固定 长度。
高灵敏:每一位输入的变化输出都会引起输出值发生巨大的变 化。
部编版一年级语文上册(全册)知识点总结

部编版一年级语文上册(全册)知识点总结第一部分:拼音复习知识要点:(1)能读准声母、韵母,准确拼读音节,读准四声及轻声音节。
(2)能背诵《声母表》。
熟悉《韵母表》、和整体认读音节。
(3)能按要求在四线格里规范书写声母、韵母和音节。
(4)能借助汉语拼音认读汉字,能根据拼音写出要求学会的汉字。
具体复习内容一、熟背并默写会三表(声母表、韵母表、整体认读音节表)1.声母表:b p m f d t n l g k h j q x zh ch sh r z c s y w (共23个)注意:(1)zh ch sh r和z c s的位置,这个地方很容易出错。
(2)分清b和d、p和q.(3)特别注意f、t、j三个字母小弯的方向。
(4)分清翘舌音(zh ch sh r)和平舌音(z c s ).2.韵母表:a o e i u ü(单韵母6个)ai ei ui ao ou iu ie üe er (复韵母9个)an en in un ün(前鼻音韵母5个)ang eng ing ong (后鼻音韵母4个)注意:(1)分清ei和ie、ui和iu、üe和ün.(2)特别注意“ou和er”,很容易出错3.整体认读音节表:zhi chi shi ri zi ci si yi wu yu ye yue yuan yin yun ying (共16个)注意:(1)整体认读音节不能拼读,要直接读出。
(2)分解开需注意:yu(y——ü)yue(y——üe)yuan(y——ü——an) yun(y——ün)二、标调规则:1.按照六个单韵母(a o e i u ü)的先后顺序,有a声调就标在a头上,没a 就找o e,i u并列标在后。
2.特别注意:小i小u并排站,谁在后面给谁带。
三、去点原则:1.小ü见到y时,一定去掉两点。
如:yu2.小ü见到j q x,去掉两点还读ü。
汉语拼音字母写法顺序

汉语拼音字母写法顺序汉语拼音字母写法顺序汉语拼音采用拉丁字母和一些附加符号表示汉语的发音。
对应汉语音系学(现代音韵学)的汉语音节结构划分,汉语拼音的形式构成也分为声母、韵母和声调三部分。
下面是小编精心为大家整理的26个拼音字母表,欢迎阅读。
26个拼音字母表汉语拼音字母:Aa Bb Cc Dd Ee Ff Gg Hh Ii Jj Kk Ll Mm Nn Oo pp Qq Rr Ss Tt Uu Vv Ww Xx Yy Zz汉语拼音声母:b [玻] p [坡] m [摸] f [佛] d [得] t [特] n [讷] l [勒] g [哥] k [科] h [喝] j [基] q [欺] x [希] z [资] c[;雌] s [思] r [日] zh[知] ch [嗤] sh [诗] y [医] w [巫]汉语拼音韵母:单韵母 a[阿] o[喔] e[鹅] i[衣] u[乌] ü[迂]复韵母 ai[哀] ei[唉] ui[威] ao[奥] ou[欧] iu[由] ie[耶] üe[椰] er[儿] 前鼻韵母 an[安] en[恩] in[因] un[温]后鼻韵母 ang[昂] eng[摁] ing[英] ong[雍]整体认读音节:zi ci si zhi chi shi ri yi wu yu yin ying yun ye yue yuan声调符号:阴平:- 阳平:/ 上声:∨ 去声:﹨汉语拼音采用拉丁字母和一些附加符号表示汉语的发音。
对应汉语音系学(现代音韵学)的汉语音节结构划分,汉语拼音的形式构成也分为声母、韵母和声调三部分。
根据汉语拼音方案《字母表》的规定,汉语拼音使用26个现代基本拉丁字母,有大小写之分,字母顺序与英语字母表一致。
其中字母V/v,在方案中规定为“拼写外来语、少数民族语言和方言”之用。
由于汉语拼音的实际职能仅限于拼写汉语普通话,如今这条规定已然无人问津。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
区块链:主流共识算法分析区块链核心框架中分布式数据库负责数据的写入与读取,密码学中非对称密钥和 HASH 等算法来标识交易者的身份和保证系统的完整性;对等网络是系统运行的基础;共识算法用来保证交易信息在整个账本不同节点中写入的一致性,常用的共识算法有 POW, POS, DPOS 等。
共识算法与 CAP 理论共识算法是为了解决在对等网络中(P2P),相互独立的节点如何达成一项决议问题的过程。
简而言之,共识算法是在解决分布式系统中如何保持一致性的问题。
关于此部分的讨论较为成熟和最为广泛接受的理论是 CAP 理论。
CAP 由?Eric Brewer )在 2000 年 PODC 会议上提出[4],并提出分布式系统不能同时完全满足 CAP 三个要求的假设,其中包括如下三个方面:Consistency:一致性从不同节点读取的数据一致。
一致性是指数据的原子性,在经典的数据库中通过事务来保障,事务完成时,无论成功或回滚,数据都会处于一致的状态,在分布式环境下,一致性是指多个节点数据是否一致。
Availability:可用性是指服务及时非错误地响应,服务一直保持可用的状态,当用户发出一个请求,服务能在一定的时间内返回结果,响应可终止、不会一直等待。
Partition tolerance:分区容错性即可靠性。
可靠性的量化指标是周期内系统平均无故障运行时间. 即使有些消息延迟或者无法到达,并不影响系统的整体运行。
简而言之,在网络分区的情况下,被分隔的节点仍能正常对外服务。
和所有分布式系统一样,区块链共识算法设计也是在权衡上面的三个因素,假如区块链中节点能立即确认交易数据,好处是不依赖其他节点立即可用,满足了 CAP 理论中的 AP,可风险是失去了强一致性,其他节点可能丢弃这个区块,因为区块所在的区块链分叉在竞争性的选举中失败了[5]。
为了获得 CP,客户端应该等待区块链大多数节点接受了这笔交易在真正接受它,说明这笔交易所在分叉已经选举胜利,获得大部分共识,获得了强一致性,但是风险是可能unavailable ,丧失 CAP 的 A,因为网络分区通信等问题可能阻止这种共识。
研究定位区块链系统是一个将交易数据正确地固化在分布式节点上的系统。
共识算法为了解决如何更安全有效的将交易数据写入到区块链上,本质上讲,共识算法旨在解决以下问题:哪个服务节点有权利生成下一个用新区块?上一个区块与下一个区块之间应如何衔接下一个区块什么时间产生?区块中应该包含了哪些内容?区块的大小是多少,一个区块中包含多少交易数据?确认机制如果解决区块链分叉的问题?纵向分析:我们以一个交易的被确认的完整过程,勾画出整个区块链系统的工作过程,纵向的分析共识算法在整个区块链系统中所扮演的角色。
横向对比:我们陈列出当前加密货币中常用的共识算法,如POW,POS,DPOS,PBFT 等,然后从算法的一致性,容错性,网络组织情况等方面进行对比分析。
纵向定位分析研究共识机制旨在设计更安全,高效的区块产生方案。
为了让读者更加清晰的认识共识算法在整个区块链中所扮演的角色,在本章中我们勾画出区块产生的完整周期,并用以比特币的例子详细的讲解区块产生的过程。
图 2. 交易数据在区块链中被确认的过程图 2 中展示了交易数据在区块链中一个完整的流转过程,在起始阶段,交易信息被客户端组装,其中交易信息包含了交易的输入金额,输入账户信息和输出账户信息等,客户端可以被认为是全节点钱包,轻钱包和各大交易平台。
在一个完整的交易被生成后被称为“原始交易(Raw Transaction)”。
原始交易并不能被矿机接收,因为缺乏相应转账人的签名。
在转账人签名完成后允许将其广播到区块链系统中,矿机采集相关交易后,经过共识算法将交易数据打包并确认到对等网络中的其他节点上。
下面我们以比特的例子详细阐述以上过程。
交易数据的组装假设用户 A 给用户 B 进行转账,用户 A 的的公钥为 Pk_a,私钥为Pr_b, 用户 B 的的公钥为Pk_b,私钥为 Pr_b. 我们按照表 1 给出的协议一步一步的给出最终可广播的内容。
备注: 以下数据均为十六进制表示,我们采用比特币中最常用的 Pay-to-PubkeyHash 进行分解。
经过客户端的数据组合,我们展示一个完整的交易协议如下,其中输入数据 inputs 数据可以从UTXO(Unspent Transaction Output,未开销的比特币交易输出)中获取。
表 1. 比特币原始区块链交易协议Version (版本)01000000Input count (输入长度)previous output hash (上一个脚本的 hash)be66e10da854e7aea9338c1f91cd489768d1d6d7189f586d7a3613f2a24d5396 |previous output index (上一个交易的索引)00000000 |scriptSig length (表示脚本的长度)scriptSig(脚本签名,实际此部分为脚本的前半部分)76a914010966776006953d5567439e5e 39f86a0d273bee88ac |Sequence (序列)ffffffff |outputs count (输出长度)outputsValue (需要转出的比特币的值,上面的输入的值减去)605af40500000000 |outputsscript length (表示脚本的长度)outputsscript(脚本签名,实际此部分为脚本的前后半部分)76a914097072524438d003d23a2f23ed b65aae1bb3e46988ac |lock time (锁定时间)00000000 |交易数据的签名OP_HASH160pubKeyHash010966776006953d5567439e5e39f86a0d273bee |OP_EQUALVERIFYOP_CHECKSIG经过签名之后我们将签名后的数据衔接在?ScriptSig?上面,因此最终的?ScriptSig?变成如下格式。
表 3. 签名后的 ScriptSig 数据格式分解。
OP_HASH160pubKeyHash14010966776006953d5567439e5e39f86a0d273bee |OP_EQUALVERIFYOP_CHECKSIG比特币的区块链中采用的是堆栈式的语言,ScriptSig 的执行过程描述如下:Pk_a | OP_DUP | OP_HASH160 | pubKeyHash | OP_EQUALVERIFY |OP_CHECKSIG | 将 Sig_a 和 Pk_a 抛出 |OP_DUP | OP_HASH160 | pubKeyHash | OP_EQUALVERIFY | OP_CHECKSIG | 将常量加入到堆栈中 |Pk_a | OP_HASH160 | pubKeyHash | OP_EQUALVERIFY | OP_CHECKSIG | OP_DUP 作用是复制 Pk_a,目前状态堆栈中有两个 Pk_a |Pk_a_hash | pubKeyHash | OP_EQUALVERIFY | OP_CHECKSIG | OP_HASH160 的作用是计算出最顶层 stack 的 hash |Pk_a_hash |pubKeyHash | OP_EQUALVERIFY | OP_CHECKSIG | 将pubKeyHash 推入堆顶 |OP_CHECKSIGOP_EQUALVERIFY 是检查栈顶的两个值是否相同OP_CHECKSIG 作用是检查栈顶的签名是否正确,正确则返回 true交易数据的广播在原始交易组装完成后,讲交易进行广播出去。
非严格意义上讲,消息广播出去分为两种形式:直接调用 API,自身加入 P2P 节点。
交易数据打包确认交易数据的打包和确认非正式术语称为“挖矿”,进行挖矿之前,首先要将交易合并在区块中,区块对于交易的数据打包采用的 Merkle tree 算法。
将多个交易的 hash 合并到树中,然后将Tree 的树根合并到块中。
需要说明的是在区块中不仅仅含有 Merkle root ,还有其他的辅助信息如图 4 所示。
共识机制作用于此部分,共识算法旨在将上面的 Merkle Root 所在的区块衔接在上一个区块中,不同的区块链产品所采用的共识算法不同,我们将在下面的章节中选取典型的算法进行分析。
纵向分析总结宏观上讲,共识算法作用于图 4 中的打包确认阶段,共识算法负责将交易数据打包到新的区块中,同时负责将该区块衔接到之前的链上。
微观上从服务节点的角度上讲,共识算法包括 4 个阶段,如下图 5 所示,分发阶段,验证阶段,挖矿阶段,宣布阶段。
矿机在分发阶段进行对交易进行收集,验证阶段开始验证交易的正确性,经过验证的交易在挖矿阶段进行确认,然后在T5 阶段进行下一轮的共识。
横向对比分析在本章中我们选取了的业界常用的共识算法进行分析,这些共识算法包括工作量证明POW, 权益证明 POS, 授权股权证明 DPOS, 瑞波共识算法 RC 和用于 Hyperledger 的拜占庭算法 PBFT。
在工作量证明 POW 中我们会以 Bitcoin 和 Ethereum 中不同的 POW 做阐述;权益证明 POS 主要以点点币为代表进行分析;授权股权证明 DPOS 分别以Bitshares 和Casper 算法进行讲解;瑞波共识算法 RC 和拜占庭算法 PBFT 的分析依附于瑞波加密货币和 Hyperledger。
同时在本章节的最后我们会从网络组织,算法的效率和货币的发行机制等多个方面进行横向分析。
工作量证明 POW工作量证明 POW(Proof-of-work)最早由 Markus Jakobsson 在反垃圾邮件系统实现中提出[6]。
反垃圾邮件系统能够使垃圾邮件发送者需要更多的时间来发送邮件,就可以增大他们的成本,起到抵挡攻击的作用。
2008 年被中本聪在论文《a peer to peer electronic cash system》[1]中再次提及并使用,其设计理念是整个系统中每个节点为整个系统提供计算能力(简称算力),通过一个竞争机制,让计算工作完成最出色的节点获得系统的奖励,完成新生成货币的分配。
目前采用 POW 的算法代表有 Bitcoin 和 Ethereum(早期版本),他们虽然同时都成为POW,并都采用全节点竞争的方式对交易进行确认,但算法本质却截然不同。
我们下面将对两个系统不同的 POW 算法进行分析。
Bitcoin的POW 算法分析下面我们采用一个例子来描述在比特币中挖矿的过程。