区块链编程初学者入门知识点有哪些
今天小编给大家分享一下区块链编程初学者入门知识点有哪些的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。
创新互联是专业的丹东网站建设公司,丹东接单;提供网站设计、成都做网站,网页设计,网站设计,建网站,PHP网站建设等专业做网站服务;采用PHP框架,可快速的进行丹东网站开发网页制作和功能扩展;专业做搜索引擎喜爱的网站,专业的做网站团队,希望更多企业前来合作!
区块链的目的
Roopa住在Delhi的一个偏远地区。印度政府每个月都会分配她少量的食物资源。因为她属于BPL(贫困线以下)类别。政府通过中介来分配这些食物资源。只有三分之一的食物资源可供人们使用,如Roopa,其余的则被中介出售以获取利润。
Sara写小说,她在亚马逊上发表。她很沮丧,因为亚马逊将50%的销售额作为佣金。这是不公平的,因为她一个人投入了写作和营销的努力。
问题是中介渴望权力和金钱。他们的座右铭已成为“不惜任何代价获利”,为了支持生产者和赋予穷人权力,我们需要中介采取道德行为。这几乎是不可能实现的,但是如果我们可以用自治系统取代中介呢?
由于计算机没有偏见,因此既不需要金钱也不需要权力。这可能是Satoshi Namakato在2008年使用区块链技术发明比特币时的想法。
Blockchain是如何发明的?
随着时间的推移,货币逐渐发展,每次发展都降低了生产成本,使交易更加便利。金币的生产成本很高。纸币的发明解决了这个问题。但是,在计算机和互联网的发明之后,人们找到了一种更方便,更快捷的交易方式。
为了安全地保持我们一生的收入并促进数字交易,我们需要一个中介(银行)。这使银行变得强大,他们可以对我们的提款/交易征收高额费用,出售我们的私人信息等。
银行对金钱的渴望导致了2008年的金融危机。银行未能尊重客户的隐私。他们薄弱的安全系统引发了数字欺诈。
货币的下一次演变必须解决以下问题。
它不应存储在中央实体。
它需要高度安全。
它应该确保隐私。
由于法定货币由政府控制,Satoshi别无选择,只能发明一种新货币(比特币)。他借助点对点网络和密码学解决了这些问题。
去中心化分享权力
Torrent使用点对点技术来共享文件。torrent应用程序不会从中央服务器或单台计算机下载文件,而是连接到其网络中的人员,找出谁拥有该文件并从其计算机下载。
你可以从世界各地的不同计算机上获取文件。如果网络中的某个人离开,你的下载不会受到影响,因为还有其他人可以共享该文件。
Satoshi采用这种技术,因为它以去中心化分散的方式存储钱。任何单一实体都无法控制它。
加密
在密码学中,人们可以对消息进行数字签名。为了做到这一点,我们需要三个东西:公钥,私钥和消息。
公钥和私钥是一组数学连接的长字符。公钥就像你的用户名一样公开,私钥就像你的密码一样是秘密。
消息是你要授权的信息,例如:“我授权你向John支付100美元”。
如果你使用公钥,私钥和消息输入算法。加密算法将产生签名。这是该消息内容唯一的另一组字符。
Public Key -----BEGIN EC PUBLIC KEY----- MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE50uE+YSxqDgMkFByhpcgTVqXCqHOh78Ljt1z0jklDff/WV7xo+U6o3REBtK/C0/LM+Ef3FB3wR9aXMGNMLb9EA== -----END EC PUBLIC KEY----- Private Key -----BEGIN EC PRIVATE KEY----- MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgwqIsXl9FqsgrzMdxaxI6flBwWIev0Z7i+WF4j8BGnrKhRANCAATnS4T5hLGoOAyQUHKGlyBNWpcKoc6HrwuO3XPSOSUN9/9ZXvGj5TqjdEQG0r8LT8sz4R/cUHfBH1pcwY0wtv0Q -----END EC PRIVATE KEY----- Message Hello World Signature B0A9A4F641D3A2E3A65576B7311DCD62ABE78BBF4D3F5FE856598508E24FCB2E6F0277C2F8D57E9E2E108B7C493986E783F5316B8046597019951669B4EE6922
要验证消息,必须输入公钥,消息和签名。加密算法可以验证消息是否由公钥的所有者签名。
破解加密算法需要1000年的时间。由于我们的计算限制,这不能更快地完成。未来的量子计算机可能会挑战这一点。但是,可以升级比特币系统以确保安全性。
Satoshi在他的系统中加入了密码术,以帮助人们从他们的钱包中授权比特币交易。
隐私
你通过生成钱包(公钥/私钥)注册到比特币。系统不会收集电子邮件ID,全名等信息。因此,除非你公布你的公钥,否则你将是匿名的。
把它放在一起Satoshi使用加密技术和点对点网络构建了一个共享分类账。当有人向某人发送比特币时,会以加密方式签署一条消息并将其广播给网络中的所有人。他们更新了他们的分类账,因此网络中的每个人都知道谁拥有什么。
Blockchain
每隔十分钟,交易就会组合成一个块并链接回以前的块。这个过程产生一个连续的区块链。挖掘是确认块的过程,这涉及网络中的计算机来解决数学问题。第一个解决问题的计算机/矿工获得了凭空制造的比特币奖励。
区块确认并添加到网络后,将在整个网络中进行复制。区块链是在制作自主比特币系统的过程中发明的,该系统在没有人为干预的情况下确认了交易。如果你正在寻找区块链的简化说明,这里有一个故事。
以太坊和智能合约简介
早些时候我们谈到用自治系统取代中介。这可以通过编程来完成。比特币的系统很难让人们对自治系统进行编码。
因此,Vitalik Buterin建立了一种名为以太坊的新加密货币。它不仅是一个去中心化的加密货币,而且是一个可以以智能合约的形式托管代码的计算机网络。
在智能合约中,我们可以编制条件。如果你想建立一个去中心化的书店。你编写说明以帮助作者添加新书,在客户进行交易后将下载链接发送到电子书等。
智能合约不仅存储条件,还存储数据。去中心化的书店的智能合约本身存储书籍列表,购买等。
但是,我们应该承认智能合约的局限性。有些系统需要人工支持,计算机无法处理。在现实世界中实施智能合约并不容易。一旦发布的智能合约不能改变,愚蠢的错误可能代价高昂。
在以太坊上编写智能合约
我们将建立一个简单的智能合约,存储和检索学生的成绩。我们将以合理的方式编写合约。这是github repo。
pragma solidity ^0.4.18; contract Grades{ }
第一行告诉编译器我们正在使用哪种版本的solidity。然后我们定义合约等级。
我们需要在合约中存储两项内容,学生姓名和成绩。因此,我们将创建一个数组来存储学生姓名和一个关联数组来存储他们的成绩。
pragma solidity ^0.4.18; contract Grades{ mapping (bytes32 => string) public grades; bytes32[] public studentList; }
现在,我们将创建一种方式来发送合约,即学生姓名列表。我们将在构造函数中执行此操作。
pragma solidity ^0.4.18; contract Grades{ mapping (bytes32 => string) public grades; bytes32[] public studentList; function Grades(bytes32[] studentNames) public { studentList = studentNames; } }
在Solidity中,我们只调用一次构造函数。我们将学生名称作为参数传递,该参数将存储在我们之前声明的studentList数组中。
现在,我们需要编写一个函数来为学生分配他们的成绩。我们还需要另一个功能来检查学生是否有效。
pragma solidity ^0.4.18; contract Grades{ mapping (bytes32 => string) public grades; bytes32[] public studentList; function Grades(bytes32[] studentNames) public { studentList = studentNames; } function giveGradeToStudent(bytes32 student, string grade) public { require(validStudent(student)); grades[student] = grade; } function validStudent(bytes32 student) view public returns (bool) { for(uint i = 0; i < studentList.length; i++) { if (studentList[i] == student) { return true; } } return false; } }
giveGradeToStudent
函数有两个参数,学生姓名和成绩。require
函数检查validStudent
函数是返回true还是false。如果返回false,则取消执行。
最后,我们需要编写一个函数来获取学生的成绩。getGradeForStudent
函数将学生姓名作为参数,从关联数组中返回相应的成绩。
pragma solidity ^0.4.18; contract Grades{ mapping (bytes32 => string) public grades; bytes32[] public studentList; function Grades(bytes32[] studentNames) public { studentList = studentNames; } function giveGradeToStudent(bytes32 student, string grade) public { require(validStudent(student)); grades[student] = grade; } function validStudent(bytes32 student) view public returns (bool) { for(uint i = 0; i < studentList.length; i++) { if (studentList[i] == student) { return true; } } return false; } function getGradeForStudent(bytes32 student) view public returns (string) { require(validStudent(student)); return grades[student]; } }
为了本教程的目的,你可以将其部署在个人区块链上。你可以用Ganache创建。以下是安装和运行ganache的命令。
npm install ganache-cli web3@0.20.3 solc node_modules/.bin/ganache-cli
保持ganache运行,在新终端上我们将部署我们的智能合约。请将智能合约保存为Grades.sol
。
让我们编译代码。
node code = fs.readFileSync('Grades.sol').toString() solc = require('solc') compiledCode = solc.compile(code)
现在让我们部署智能合约。在区块链上部署合约会花费你的gas,这是为了奖励那些向你租用计算能力的人。所以我们必须指定你愿意分配的gas量。你可以使用gas计算器估算。但是,你现在无需付费,因为你正在使用个人区块链进行部署,这是你正在使用的资源。在公共以太坊区块链上部署合约时,你必须付费。
Web3 = require('web3') web3 = new Web3(new Web3.providers.HttpProvider("http://localhost:8545")); abiDefinition = JSON.parse(compiledCode.contracts[':Grades'].interface) GradesContract = web3.eth.contract(abiDefinition) byteCode = compiledCode.contracts[':Grades'].bytecode deployedContract = GradesContract.new(['John','James'],{data: byteCode, from: web3.eth.accounts[0], gas: 4700000})
现在让我们调用我们的函数给我们的学生John提供成绩A +
。稍后,我们将使用getGradeForStudent
函数检查它是否已更新。
deployedContract.giveGradeToStudent('John', 'A+', {from: web3.eth.accounts[0]}) deployedContract.getGradeForStudent.call('John') 'A+'
恭喜,你已经部署了智能合约。
以上就是“区块链编程初学者入门知识点有哪些”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注创新互联行业资讯频道。
分享题目:区块链编程初学者入门知识点有哪些
网站路径:http://azwzsj.com/article/pdopse.html