区块链思维导图笔记

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;
} 
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,033评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,725评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,473评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,846评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,848评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,691评论 1 282
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,053评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,700评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,856评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,676评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,787评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,430评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,034评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,990评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,218评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,174评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,526评论 2 343

推荐阅读更多精彩内容