区块链思维导图笔记

image.png

备注


以上导图最上面是说的区块链发生的背景
左边是开发一个demo,会在文章最后面附一个基于以太坊的投票智能合约
下面是他的一些主要原理之类的,描述加密算法和p2p网络,还有科普。
右边是实战喽,主要是基于以太坊的,采用web3.js和轻钱包一起整合使用

科普

51% Attack(51%攻击)

当一个单一个体或者一个组超过一半的计算能力时,这个个体或组就可以控制整个加密货币网络,如果他们有一些恶意的想法,他们就有可能发出一些冲突的交易来损坏整个网络。

Address(地址)

加密货币地址用于在网络上发送或接收交易。 地址通常表示为个数字字字符。

Bitcoin(比特币)

Bitcoin是在全球对等网络上运行的第一个去中心化开放源代码的加密货币,不需要中间商和集中式发行商。

Blockchain(区块链)

区块链是一个共享的分布式账本,其中交易通过附加块永久记录。 区块链作为所有交易的历史记录,从发生块到最新的块,因此命名为blockchain(区块链)。

Cryptographic Hash Function(加密哈希函数)

密码哈希产生从可变大小交易输入固定大小和唯一哈希值。 SHA-256计算算法是加密散列的一个例子。

Ethereum(以太坊)

Ethereum是一个基于blockchain的去中心化运行智能合约的平台,旨在解决与审查,欺诈和第三方干扰相关的问题。

Hash(哈希)

对输出数据执行散列函数的行为。 这是用于确认货币交易。

Mining(挖矿)

挖矿是验证区块链交易的行为。 验证的必要性通常以货币的形式奖励给矿工。 在这个密码安全的繁荣期间,当正确完成计算,采矿可以是一个有利可图的业务。 通过选择最有效和最适合的硬件和采矿目标,采矿可以产生稳定的被动收入形式。

Peer to Peer(点对点)

对等(P2P)是指在高度互联的网络中,双方之间的去中心化互动或更多的互动。 P2P网络的参与者通过单个调解点直接相互协商。

Public Address(公用地址)

公共地址是公钥的密码哈希值。 它们作为可以在任何地方发布的电子邮件地址,与私钥不同。

Private Key(私钥)

私钥是一串数据,它是允许您访问特定钱包中的令牌。 它们作为密码,除了地址的所有者之外,都被隐藏。

Proof of Work(工作证明)

POW(Proof of Work,工作证明)是指获得多少货币,取决于你挖矿贡献的工作量,电脑性能越好,分给你的矿就会越多。

Proof of Stake(股权证明)

POS(Proof of Stake,股权证明)根据你持有货币的量和时间进行利息分配的制度,在POS模式下,你的“挖矿”收益正比于你的币龄,而与电脑的计算性能无关。

SHA-256

SHA-256是比特币一些列数字货币使用的加密算法。 然而,它使用了大量的计算能力和处理时间,迫使矿工组建采矿池以获取收益。

Smart Contracts(智能合约)

智能合约将可编程语言的业务规则编码到区块上,并由网络的参与者实施。

Solidity

Solidity是Ethereum用于开发智能合约的编程语言。

Transaction Block(交易区块)

聚集到一个块中的交易的集合,然后可以将其散列并添加到区块链中。

Transaction Fee(手续费)

所有的加密货币交易都会涉及到一笔很小的手续费。这些手续费用加起来给矿工在成功处理区块时收到的区块奖励。

Wallet(钱包)

一个包含私钥的文件。 它通常包含一个软件客户端,允许访问查看和创建钱包所设计的特定块链的交易。


RSA算法


image.png
image.png

投票合约


pragma solidity ^0.4.0;
contract voteDemo {

//定义投票人的结构
struct Voter{
    uint weight; //投票人的权重
    bool voted ;// 是否已经投票
    address delegate; //委托代理人投票
    uint vote; // 投票主题的序号
}

//定义投票主题的结构
struct Posposal{
    bytes8 name ;  //投票主题的名字
    uint voteCount; //主题的得到的票数
}

//定义投票的发起者
address public chairperson;

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

//具体的投票主题
Posposal[] public posposals;


//构造函数
function voteDemo(bytes8[] peposposalName){
    //初始化投票的发起人,就是当前合约的部署者
    chairperson = msg.sender;
    //给发起人投票权
    voters[chairperson].weight = 1;
    
    //初始化投票的主题
    for(uint i = 0; i <peposposalName.length ;i++ ){
        posposals.push(Posposal({name:peposposalName[i],voteCount:0}));
    }
}

//添加投票者
function  giveRightToVote(address _voter){
    //只有投票的发起人才能够添加投票者
    //添加的投票者不能是已经参加过投票了
    if(msg.sender !=chairperson  ||voters[_voter].voted ){
        throw ;
    }
    //赋予合格的投票者投票权重
    voters[_voter].weight = 1;
}

//将自己的票委托给to来投
function delegate(address to){
    //检查当前交易的发起者是不是已经投过票了
    Voter sender = voters[msg.sender];
    //如果是的话,则程序终止
    if(sender.voted){
        throw ;
    }
    
    //检查委托人是不是也委托人其他人来投票
    while(voters[to].delegate != address(0)){
        //如果是的话,则把委托人设置成委托人的委托人
        to = voters[to].delegate;
        //如果发现最终的委托人是自己,则终止程序
        if(to == msg.sender){
            throw;
        }
    }
    
    //交易的发起者不能再投票了
    sender.voted = true;
    //设置交易的发起者的投票代理人
    sender.delegate = to;
    //找到代理人
    Voter delegate = voters[to];
    //检测代理人是否已经投票
    if(delegate.voted){
        //如果是:则把票直接投给代理人投的那个主题
        posposals[delegate.vote].voteCount +=sender.weight;
    }else{
        //如果不是:则把投票的权重给予代理人
        delegate.weight +=sender.weight;
    }
}
//投票
function vote(uint pid){
    //找到投票者
    Voter sender = voters[msg.sender];
    //检查是不是已经投过票
    if(sender.voted){
        //如果是:则程序终止
        throw;
    }else{
        //如果否:则投票
        sender.voted = true;  //设置当前用户已投票
        sender.vote = pid;    //设置当前用户的投的主题的编号
        posposals[pid].voteCount +=sender.weight;  //把当前用户的投票权重给予对应的主题
    }
}

//计算票数最多的主题
function winid() constant returns(uint winningid){
    //声明一个临时变量,用来比大小
    uint winningCount = 0;
    //编列主题,找到投票数最大的主题
    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;
} 
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容