1. 区块链技术入门,涉及哪些编程语言
技术与语言无关。正常情况下同样的技术,在有权限的情况下多数语言都可以实现同样的功能。
你说的应该是虚拟币上的技术,这个源码通常是C++开发的。
2. 区块链的模型架构是什么
目前市场上区块链培训课程跨度很大,课程内容和授课形式也是五花八门。
区块链
1、编程基础入门
计算机软硬件基础、字符集及字符编码、HTMLCSS(含HTML5CSS3)、ECMABOMDOM、jQuery、node.js、Ajax及Express
2、Go编程语言
Go基本语法、流程控制、函数及数据、错误处理、Go面向对象编程、Go并发编程、Go网络编程、Go安全编程、Go进阶编程(goroutine、channel)、数据库MySQL、LevelDB
3、区块链1.0——比特币Bitcoin
比特币原理、比特币系统架构、密码算法(Go语言实现)、共识算法(Go语言实现)、比特币交易原理及交易脚本、比特币RPC编程(node.js实现)、比特敏贺腊币源码解析
4、区块链2.0——以太坊Ethereum
以太坊工作原理及基础架构、以太坊基本概念(账户、交易、Gas)、以太坊钱包Mist及Metamask、以太坊交易、ERC20标准Token开发部署、以桥滑太坊开发IDE——remix-ide、智能合约与Solidity、Solidity部署、备份及调用、框架技术:truffle及web3、DApp开发实战、Geth
5、区块链3.0——超级账本之Fabric
超级账本项目介绍、Fabric部署和使用拍绝、Fabric配置管理、Fabric架构设计、Fabric CA应用与配置、应用开发实战。
3. 以太坊多节点私有链部署
假设两台电脑A和B
要求:
1、两台电脑要在一个网络中,能ping通
2、两个节点使用相同的创世区块文件
3、禁用ipc;同时使用参数--nodiscover
4、networkid要相同,端口号可以不同
1.4 搭建私有链
1.4.1 创建目录和genesis.json文件
创建私有链根目录./testnet
创建数据存储目录./testnet/data0
创建创世区块配置文件./testnet/genesis.json
1.4.2 初始化操作
cd ./eth_test
geth --datadir data0 init genesis.json
1.4.3 启动私有节点
1.4.4 创建账号
personal.newAccount()
1.4.5 查看账号
eth.accounts
1.4.6 查看账号余额
eth.getBalance(eth.accounts[0])
1.4.7 启动&停止挖矿
启动挖矿:
miner.start(1)
其中 start 的参数表示挖矿使用的线程数。第一次启动挖矿会先生成挖矿所需的 DAG 文件,这个过程有点慢,等进度达到 100% 后,就会开始挖矿,此时屏幕会被挖矿信息刷屏。
停止挖矿,在 console 中输入:
miner.stop()
挖到一个区块会奖励5个以太币,挖矿所得的奖励会进入矿工的账户,这个账户叫做 coinbase,默认情况下 coinbase 是本地账户中的第一个账户,可以通过 miner.setEtherbase() 将其他账户设置成 coinbase。
1.4.8 转账
目前,账户 0 已经挖到了 3 个块的奖励,账户 1 的余额还是0:
我们要从账户 0 向账户 1 转账,所以要先解锁账户 0,才能发起交易:
发送交易,账户 0 -> 账户 1:
需要输入密码 123456
此时如果没有挖矿,用 txpool.status 命令可以看到本地交易池中有一个待确认的交易,可以使用 eth.getBlock("pending", true).transactions 查看当前待确认交易。
使用 miner.start() 命令开始挖矿:
miner.start(1);admin.sleepBlocks(1);miner.stop();
新区块挖出后,挖矿结束,查看账户 1 的余额,已经收到了账户 0 的以太币:
web3.fromWei(eth.getBalance(eth.accounts[1]),'ether')
用同样的genesis.json初始化操作
cd ./eth_test
geth --datadir data1 init genesis.json
启动私有节点一,修改 rpcport 和port
可以通过 admin.addPeer() 方法连接到其他节点,两个节点要要指定相同的 chainID。
假设有两个节点:节点一和节点二,chainID 都是 1024,通过下面的步骤就可以从节点二连接到节点一。
首先要知道节点一的 enode 信息,在节点一的 JavaScript console 中执行下面的命令查看 enode 信息:
admin.nodeInfo.enode
" enode://@[::]:30303 "
然后在节点二的 JavaScript console 中执行 admin.addPeer(),就可以连接到节点一:
addPeer() 的参数就是节点一的 enode 信息,注意要把 enode 中的 [::] 替换成节点一的 IP 地址。连接成功后,节点一就会开始同步节点二的区块,同步完成后,任意一个节点开始挖矿,另一个节点会自动同步区块,向任意一个节点发送交易,另一个节点也会收到该笔交易。
通过 admin.peers 可以查看连接到的其他节点信息,通过 net.peerCount 可以查看已连接到的节点数量。
除了上面的方法,也可以在启动节点的时候指定 --bootnodes 选项连接到其他节点。 bootnode 是一个轻量级的引导节点,方便联盟链的搭建 下一节讲 通过 bootnode 自动找到节点
参考: https://cloud.tencent.com/developer/article/1332424
4. 使用Nodejs部署智能合约
实现智能合约的方式很多种,可以用truffle框架来实现,编译,部署。
这里介绍一种简单的使用nodejs来实现,编译,部署的方法。
创建一个nodejs项目,实现一个简单的智能合约。
这个合约实现了一个造币和转币的逻辑。
我们的合约是运行在evm上面的字节码,solidity是静态语言,需要通过编译器生成evm的字节码。
调用 node compile.js ,对BaseToken进行编译,生成字节码。web3中提供了一个部署合约的接口,使用如下,
利用编译生成的abi和bytecode,创建一个合约对象,然后进行发布,等待着异步执行的方法输出合约地址 contractAddress ,这样就完成了部署。不过这种方式有一个问题,就是在发布合约时,你的私钥处于联网状态,
处于安全策略,我们需要尽量避免私钥在联网状态。
以太坊上部署合约是向空地址发送一个附有字节码的签名交易,其中发送者就是这个合约的拥有者。因此我们只需要将合约构建成一笔交易,我们在无网状态下对这笔交易进行签名,然后将签名发送到以太坊网络中。这样能够降低我们私钥被泄漏的风险。
对合约的签名方法如下:
以上对一个合约签名,这里需要注意的问题是,to的地址需要是,空地址。
完成签名之后,我们把这笔交易发送出去就好,最简单的方法就是使用 etherscan的发送Tx的方式 ,一旦发送完成,部署完成,就可以看到合约地址。
5. 币圈内的一些专业术语是什么
26个区块链行业常用名词解释1、Blockchain——区块链
区块链是分布式数据存储、点对点传输、共识机制、加密货币算法等计算机技术的新型应用模式。是一个共享的分布式账本,其中交易通过附加块永久记录。
2、Block——区块
在比特币网络中,数据会以文件的形式被永久记录,我们称这些文件为区块。一个区块是一些或所有最新比特币交易的记录集,且未被其他先前的区块记录。
3、Node——节点
由区块链网络的参与者操作的分类帐的副本。
4、去中心化
去中心化是一种现象或结构,必须在拥有众多节点的系统中或在拥有众多个体的群中才能出现或存在。节点与节点之间的影响,会通过网络而形成非线性因果关系。
5、共识机制
共识机制是通过特殊节点的投票,在很短的时间内完成对交易的验证和确认;对一笔交易,如果利益不相干的若干个节点能够达成共识,我们就可以认为全网对此也能够达成共识。
6、Pow——工作量证明
Proofof Work,是指获得多少货币,取决于你挖矿贡献的工作量,电脑性能越好,分给你的矿就会越多。
7、PoS——权益证明
Proofof Stake,根据你持有货币的量和时间进行利息分配的制度,在POS模式下,你的“挖矿”收益正比于你的币龄,而与电脑的计算性能无关。
8、智能合约
智能合约是一种旨在以信息化方式传播、验证或执行合约的计算机协议。智能合约允许在没有第三方的情况下进行可信交易,这些交易可追踪且不可逆转。
9、时间戳
时间戳是指字符串或编码信息用于辨识记录下来的时间日期。国际标准为ISO 8601。
10、图灵完备
图灵完成是指机器执行任何其他可编程计算机能够执行计算的能力。
11、Dapp——去中心化应用
是一种开源的应用程序,自动运行,将其数据存储在区块链上,以加密货币令牌的形式激励,并以显示有价值证明的协议进行操作。
12、DAO——去中心化自治组织
可以认为是在没有任何人为干预的情况下运行的公司,并将一切形式的控制交给一套不可破坏的业务规则。
13、PrivateKey——私钥
私钥是一串数据,它是允许你访问特定钱包中的令牌。它们作为加密货币,除了地址的所有者之外,都被隐藏。
14、PublicKey——公钥
是和私钥成对出现的,公钥可以算出币的地址,因此可以作为拥有这个币地址的凭证。
15、矿机
尝试创建区块并将其添加到区块链上的计算设备或者软件。在一个区块链网络中,当一个新的有效区块被创建时,系统一般会自动给予区块创建者(矿机)一定数量的代币,作为奖励。
16、矿池
是一个全自动的挖矿平台,使得矿机们能够贡献各自的算力一起挖矿以创建区块,获得区块奖励,并根据算力贡献比例分配利润(即矿机接入矿池—提供算力—获得收益)。
17、公有链
完全开放的区块链,是指任何人都可读取的、任何人都能发送交易且交易能获得有效确认的、全世界的人都可以参与系统维护工作,任何人都可以通过交易或挖矿读取和写入数据。
18、私有链
写入权限仅面向某个组织或者特定少数对象的区块链。读取权限可以对外开放,或者进行任意程度地限制。
19、联盟链
共识机制由指定若干机构共同控制的区块链。
20、侧链
楔入式侧链技术(pegged sidechains),它将实现比特币和其他数字资产在多个区块链间的转移,这就意味着用户们在使用他们已有资产的情况下,就可以访问新的加密货币系统。
21、跨链技术
跨链技术可以理解为连接各区块链的桥梁,其主要应用是实现各区块链之间的Atom交易、资产转换、区块链内部信息互通,或解决Oracle的问题等。
22、硬分叉
区块链发生永久性分歧,在新共识规则发布后,部分没有升级的节点无法验证已经升级的节点生产的区块,通常硬分叉就会发生。
23、软分叉
当新共识规则发布后,没有升级的节点会因为不知道新共识规则下,而生产不合法的区块,就会产生临时性分叉。
24、Hash——哈希值
一般翻译做”散列”,也有直接音译为”哈希”的。简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数。
25、主链
主链一词源于主网(,相对于测试网),即正式上线的、独立的区块链网络。
对币圈“行话”还不了解的小伙伴,赶快来学习一下:
1、法币是什么?
法币是法定货币,是由国家和政府发行的,只有政府信用来做担保,如人民币、美元等等。
2、token是什么?
token,通常翻译成通证。Token是区块链中的重要概念之一,它更广为人知的名字是“代币”,但在专业的“链圈”人看来,它更准确的翻译是“通证”,代表的是区块链上的一种权益证明,而非货币。
Token的三个要素
一是数字权益证明,通证必须是以数字形式存在的权益凭证,代表一种权利、一种固有和内在的价值;
二是加密货币,通证的真实性、防篡改性、保护隐私等能力由加密货币学予以保障;
三是能够在一个网络中流动,从而随时随地可以验证。
3、建仓是什么?
币圈建仓也叫开仓,是指交易者新买入或新卖出一定数量的数字货币。
4、梭哈是什么?
币圈梭哈就是指把本金全部投入。
5、空投是什么?
空投是目前一种十分流行的加密货币营销方式。为了让潜在投资者和热衷加密货币的人获得代币相关信息,代币团队会经常性地进行空投。
6、锁仓是什么?
锁仓一般是指投资者在买卖合约后,当市场出现与自己操作相反的走势时,开立与原先持仓相反的新仓,又称对锁、锁单,甚至美其名曰蝴蝶双飞。
7、糖果是什么?
币圈糖果即各种数字货币刚发行处在ICO时免费发放给用户的数字币,是虚拟币项目发行方对项目本身的一种造势和宣传。
8、破发是什么?
破指的是跌破,发指的是数字货币的发行价格。币圈破发是指某种数字货币跌破了发行的价格。
9、私募是什么?
币圈私募是一种投资加密货币项目的方式,也是加密货币项目创始人为平台运作募集资金的最好方式。
10、K线图怎么看?
K线图(Candlestick Charts)又称蜡烛图、日本线、阴阳线、棒线、红黑线等,常用说法是“K线”。它是以每个分析周期的开盘价、最高价、最低价和收盘价绘制而成。
11、对冲是什么?
一般对冲是同时进行两笔行情相关、方向相反、数量相当、盈亏相抵的交易。在期货合约市场,买入相同数量方向不同的头寸,当方向确定后,平仓掉反方向头寸,保留正方向获取盈利。
12、头寸是什么?
头寸是一种市场约定,承诺买卖合约的最初部位,买进合约者是多头,处于盼涨部位;卖出合约为空头,处于盼跌部位。
13、利好是什么?
利好:指币种获得主流媒体关注,或者某项技术应用有突破性进展,有利于刺激价格上涨的消息,都称为利好。
14、利空是什么?
利空:促使币价下跌的消息,如比特币技术问题,央行打压等。
15、反弹是什么?
币价在下跌趋势中因下跌过快而回升的价格调整现象。回升幅度小于下跌幅度。
16、杠杆是什么?
杠杆交易,顾名思义,就是利用小额的资金来进行数倍于原始金额的投资,以期望获取相对投资标的物波动的数倍收益率,抑或亏损。
6. 以太坊web3.sendRawTransaction离线签名交易
工作中需要复现短地址攻击和the重入攻击,重入攻击可以直接通过eth.sendTransaction和remix来发送交易,但是短地址攻击由于钱包和remix这些都对input做了长度检测,无法通过这些方式来复现,只能通过发离线签名交易来实现。
1.环境依赖:nodejs , keythereum , ethereumjs-common , ethereumjs-tx 。
2.进入Node控制台,获取相应账户私钥。
3.签名交易,进入Node,这里注意nonce问题,需要Nonce是实际可执行的nonce,Nonce不对会发送交易失败,关于如何获取input data网络比较多就不详述了。
4.遇到的坑,网络出来的步骤是有问题的或者过时了,当时是参考的这篇文章, https://www.freebuf.com/articles/blockchain-articles/199903.html
,在控制台通过eth.sendRawTransaction发送签名好的交易,我遇到了这个错误 ** sendRawTransaction invalid sender **
7. 全球第二大加密货币的以太币升至纪录高点,这释放出什么信号
相较于比特币的威名远扬,尽管以太币的币值较年初而言涨幅更加恐怖,但其名气以及市场规模还是次于比特币。比特币开发团队主管Peter Szilagyi将以太币网络节点数据搬至谷歌地球上,清晰明了地告诉各位以太币在未来将如何统治数字货币世界。
自出生以来两年时间,以太币以迅雷不及掩耳之势迅速攻占了全球的富裕国家或地区。
倘若将全球例如欧洲和北美一类较为富裕的地区同亚洲以及南美这些较为贫穷的地区进行比对,”Szilagyi在接受CNBC采访的邮件中写到:“你会发现,活跃节点的密度同该地区的交通便利程度、工业化水平以及富裕程度相挂钩。就我看来,此种相关性是因为完全运作以太坊需要相较为集中的资源。”
8. web3.js如何新建以太坊账户
推荐提问的同学去看看这个完整的区块链新手入门的以太坊DApp开发教程,包括node.js、web3.js、solidity、geth、turffle都会涉及到,应该有帮助:
以太坊DApp入门实战教程
9. 目前国内有哪些区块链技术应用开发平台
所谓区块链技术,简称BT(Blockchain technology),也被称之为分布式账本技术,是一种互联网数据库技术,其特点是去中心化、公开透明,让每个人均可参与数据库记录。