區(qū)塊鏈思維導(dǎo)圖筆記

image.png

備注


以上導(dǎo)圖最上面是說的區(qū)塊鏈發(fā)生的背景
左邊是開發(fā)一個(gè)demo,會(huì)在文章最后面附一個(gè)基于以太坊的投票智能合約
下面是他的一些主要原理之類的,描述加密算法和p2p網(wǎng)絡(luò),還有科普。
右邊是實(shí)戰(zhàn)嘍,主要是基于以太坊的,采用web3.js和輕錢包一起整合使用

科普

51% Attack(51%攻擊)

當(dāng)一個(gè)單一個(gè)體或者一個(gè)組超過一半的計(jì)算能力時(shí),這個(gè)個(gè)體或組就可以控制整個(gè)加密貨幣網(wǎng)絡(luò),如果他們有一些惡意的想法,他們就有可能發(fā)出一些沖突的交易來損壞整個(gè)網(wǎng)絡(luò)。

Address(地址)

加密貨幣地址用于在網(wǎng)絡(luò)上發(fā)送或接收交易。 地址通常表示為個(gè)數(shù)字字字符。

Bitcoin(比特幣)

Bitcoin是在全球?qū)Φ染W(wǎng)絡(luò)上運(yùn)行的第一個(gè)去中心化開放源代碼的加密貨幣,不需要中間商和集中式發(fā)行商。

Blockchain(區(qū)塊鏈)

區(qū)塊鏈?zhǔn)且粋€(gè)共享的分布式賬本,其中交易通過附加塊永久記錄。 區(qū)塊鏈作為所有交易的歷史記錄,從發(fā)生塊到最新的塊,因此命名為blockchain(區(qū)塊鏈)。

Cryptographic Hash Function(加密哈希函數(shù))

密碼哈希產(chǎn)生從可變大小交易輸入固定大小和唯一哈希值。 SHA-256計(jì)算算法是加密散列的一個(gè)例子。

Ethereum(以太坊)

Ethereum是一個(gè)基于blockchain的去中心化運(yùn)行智能合約的平臺(tái),旨在解決與審查,欺詐和第三方干擾相關(guān)的問題。

Hash(哈希)

對(duì)輸出數(shù)據(jù)執(zhí)行散列函數(shù)的行為。 這是用于確認(rèn)貨幣交易。

Mining(挖礦)

挖礦是驗(yàn)證區(qū)塊鏈交易的行為。 驗(yàn)證的必要性通常以貨幣的形式獎(jiǎng)勵(lì)給礦工。 在這個(gè)密碼安全的繁榮期間,當(dāng)正確完成計(jì)算,采礦可以是一個(gè)有利可圖的業(yè)務(wù)。 通過選擇最有效和最適合的硬件和采礦目標(biāo),采礦可以產(chǎn)生穩(wěn)定的被動(dòng)收入形式。

Peer to Peer(點(diǎn)對(duì)點(diǎn))

對(duì)等(P2P)是指在高度互聯(lián)的網(wǎng)絡(luò)中,雙方之間的去中心化互動(dòng)或更多的互動(dòng)。 P2P網(wǎng)絡(luò)的參與者通過單個(gè)調(diào)解點(diǎn)直接相互協(xié)商。

Public Address(公用地址)

公共地址是公鑰的密碼哈希值。 它們作為可以在任何地方發(fā)布的電子郵件地址,與私鑰不同。

Private Key(私鑰)

私鑰是一串?dāng)?shù)據(jù),它是允許您訪問特定錢包中的令牌。 它們作為密碼,除了地址的所有者之外,都被隱藏。

Proof of Work(工作證明)

POW(Proof of Work,工作證明)是指獲得多少貨幣,取決于你挖礦貢獻(xiàn)的工作量,電腦性能越好,分給你的礦就會(huì)越多。

Proof of Stake(股權(quán)證明)

POS(Proof of Stake,股權(quán)證明)根據(jù)你持有貨幣的量和時(shí)間進(jìn)行利息分配的制度,在POS模式下,你的“挖礦”收益正比于你的幣齡,而與電腦的計(jì)算性能無關(guān)。

SHA-256

SHA-256是比特幣一些列數(shù)字貨幣使用的加密算法。 然而,它使用了大量的計(jì)算能力和處理時(shí)間,迫使礦工組建采礦池以獲取收益。

Smart Contracts(智能合約)

智能合約將可編程語言的業(yè)務(wù)規(guī)則編碼到區(qū)塊上,并由網(wǎng)絡(luò)的參與者實(shí)施。

Solidity

Solidity是Ethereum用于開發(fā)智能合約的編程語言。

Transaction Block(交易區(qū)塊)

聚集到一個(gè)塊中的交易的集合,然后可以將其散列并添加到區(qū)塊鏈中。

Transaction Fee(手續(xù)費(fèi))

所有的加密貨幣交易都會(huì)涉及到一筆很小的手續(xù)費(fèi)。這些手續(xù)費(fèi)用加起來給礦工在成功處理區(qū)塊時(shí)收到的區(qū)塊獎(jiǎng)勵(lì)。

Wallet(錢包)

一個(gè)包含私鑰的文件。 它通常包含一個(gè)軟件客戶端,允許訪問查看和創(chuàng)建錢包所設(shè)計(jì)的特定塊鏈的交易。


RSA算法


image.png
image.png

投票合約


pragma solidity ^0.4.0;
contract voteDemo {

//定義投票人的結(jié)構(gòu)
struct Voter{
    uint weight; //投票人的權(quán)重
    bool voted ;// 是否已經(jīng)投票
    address delegate; //委托代理人投票
    uint vote; // 投票主題的序號(hào)
}

//定義投票主題的結(jié)構(gòu)
struct Posposal{
    bytes8 name ;  //投票主題的名字
    uint voteCount; //主題的得到的票數(shù)
}

//定義投票的發(fā)起者
address public chairperson;

//所有人的投票人
mapping(address=>Voter) public voters;

//具體的投票主題
Posposal[] public posposals;


//構(gòu)造函數(shù)
function voteDemo(bytes8[] peposposalName){
    //初始化投票的發(fā)起人,就是當(dāng)前合約的部署者
    chairperson = msg.sender;
    //給發(fā)起人投票權(quán)
    voters[chairperson].weight = 1;
    
    //初始化投票的主題
    for(uint i = 0; i <peposposalName.length ;i++ ){
        posposals.push(Posposal({name:peposposalName[i],voteCount:0}));
    }
}

//添加投票者
function  giveRightToVote(address _voter){
    //只有投票的發(fā)起人才能夠添加投票者
    //添加的投票者不能是已經(jīng)參加過投票了
    if(msg.sender !=chairperson  ||voters[_voter].voted ){
        throw ;
    }
    //賦予合格的投票者投票權(quán)重
    voters[_voter].weight = 1;
}

//將自己的票委托給to來投
function delegate(address to){
    //檢查當(dāng)前交易的發(fā)起者是不是已經(jīng)投過票了
    Voter sender = voters[msg.sender];
    //如果是的話,則程序終止
    if(sender.voted){
        throw ;
    }
    
    //檢查委托人是不是也委托人其他人來投票
    while(voters[to].delegate != address(0)){
        //如果是的話,則把委托人設(shè)置成委托人的委托人
        to = voters[to].delegate;
        //如果發(fā)現(xiàn)最終的委托人是自己,則終止程序
        if(to == msg.sender){
            throw;
        }
    }
    
    //交易的發(fā)起者不能再投票了
    sender.voted = true;
    //設(shè)置交易的發(fā)起者的投票代理人
    sender.delegate = to;
    //找到代理人
    Voter delegate = voters[to];
    //檢測(cè)代理人是否已經(jīng)投票
    if(delegate.voted){
        //如果是:則把票直接投給代理人投的那個(gè)主題
        posposals[delegate.vote].voteCount +=sender.weight;
    }else{
        //如果不是:則把投票的權(quán)重給予代理人
        delegate.weight +=sender.weight;
    }
}
//投票
function vote(uint pid){
    //找到投票者
    Voter sender = voters[msg.sender];
    //檢查是不是已經(jīng)投過票
    if(sender.voted){
        //如果是:則程序終止
        throw;
    }else{
        //如果否:則投票
        sender.voted = true;  //設(shè)置當(dāng)前用戶已投票
        sender.vote = pid;    //設(shè)置當(dāng)前用戶的投的主題的編號(hào)
        posposals[pid].voteCount +=sender.weight;  //把當(dāng)前用戶的投票權(quán)重給予對(duì)應(yīng)的主題
    }
}

//計(jì)算票數(shù)最多的主題
function winid() constant returns(uint winningid){
    //聲明一個(gè)臨時(shí)變量,用來比大小
    uint winningCount = 0;
    //編列主題,找到投票數(shù)最大的主題
    for(uint i = 0; i<posposals.length; i++ ){
        if(posposals[i].voteCount > winningCount ){
            winningCount = posposals[i].voteCount;
            winningid = i;
        }
    }
}


function winname() constant returns(bytes8 winnername){
    winnername = posposals[winid()].name;
} 
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容