Go语言中文网 为您找到相关结果 874

兄弟连区块链培训分享Go语言获取变量数据类型

“区块链是一门集合密码学、共识算法、智能合约、超级账本等多门技术的复杂性综合学科。”尹正表示,区块链培训机构的师资质量及其对区块链行业的认知水平参差不齐,普通消费者也无从考究。 Go语言主要用作服务器端开发,其定位是用来开发“大型软件”的,适合于很多程序员一起开发大型软件,并且开发周期长,支持云计算的网络服务。Go语言能够让程序员快速开发,并且在软件不断的增长过程中,它能让程序员更容易地进行维护和修改。它融合了传统编译型语言的高效性和脚本语言的易用性和富于表达性。如果某个函数的入参是interface{},有下面几种方式可以获取入参的方法:import "fmt"func main() { v := "hello world" fmt.Println(typeof(v))}func type...阅读全文

博文 2018-08-21 14:34:50 兄弟连区块链培训

golang实现基于TCP协议的简单的C-S架构

一、SERVER端 package main import ( "fmt" "net" "runtime" "strings" ) func handleConn(conn net.Conn) { defer conn.Close() ip := conn.RemoteAddr() fmt.Println("客户端已连接---", ip) //读取客户端数据 buf := make([]byte, 4096) for { n, err := conn.Read(buf) if n == 0 { fmt.Println("客户端断开连接") runtime.Goexit() } if err != nil { fmt.Println("conn.Read err:", err) return ...阅读全文

博文 2019-07-25 13:32:41 七八个星天

加密货币的本质

链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载。 去年,比特币暴涨,其他币也像雨后春笋一样冒出来,已经有1000多种了。 很多人都在问,加密货币(cryptocurrency)的时代,真的来临了吗?将来会不会人类不再使用美元、人民币,改用加密货币?那么多品种,我应该使用哪一种币?要不要现在就去投资一些? 这些问题的答案,我也想知道,就花了很多时间查阅资料、研究协议。前两周发表的《区块链入门教程》和《比特币入门教程》,是我的学习心得。但是,那两篇教程主要介绍基本概念、探讨协议的可行性,没回答一个根本的问题:加密货币到底是什么? 下面就是我对这个问题的思考。阅读之前,如果你已经了解区块链和比特币,那很好;如果不了解,也没关系,本文不涉及技术,只讨论最基本的原理。 一...阅读全文

兄弟连区块链教程以太源码分析accounts账户管理分析

兄弟连区块链教程以太源码分析accounts账户管理分析。 数据结构分析 ETH的账户管理定义在accounts/manager.go中,其数据结构为: // Manager is an overarching account manager that can communicate with various// backends for signing transactions.type Manager struct {backends map[reflect.Type][]Backend // Index of backends currently registeredupdaters []event.Subscription // Wallet update subscriptions...阅读全文

博文 2018-10-17 15:34:40 兄弟连区块链培训

区块链入门教程以太坊源码分析p2p-dial.go源码分析

兄弟连区块链入门教程以太坊源码分析p2p-dial.go源码分析,2018年下半年,区块链行业正逐渐褪去发展之初的浮躁、回归理性,表面上看相关人才需求与身价似乎正在回落。但事实上,正是初期泡沫的渐退,让人们更多的关注点放在了区块链真正的技术之上。dial.go在p2p里面主要负责建立链接的部分工作。 比如发现建立链接的节点。 与节点建立链接。 通过discover来查找指定节点的地址。等功能。dial.go里面利用一个dailstate的数据结构来存储中间状态,是dial功能里面的核心数据结构。 // dialstate schedules dials and discovery lookups. // it get's a chance to compute new tasks on ev...阅读全文

博文 2018-10-24 15:34:47 兄弟连区块链培训

golang遇到docker很简单

本文转自:https://www.cnblogs.com/angelyan/p/11218260.html 一、获取镜像指定版本,该版本包含了web控制页面 docker pull rabbitmq:management 二、运行镜像 方式一:默认guest 用户,密码也是 guest docker run -d --hostname my-rabbit --name rabbit -p 15672:15672 -p 5672:5672 rabbitmq:management 方式二:设置用户名和密码 docker run -d --hostname my-rabbit --name rabbit -e RABBITMQ_DEFAULT_USER=user -e RABBITMQ_DEFAU...阅读全文

博文 2019-12-31 14:32:50 mick_

兄弟连区块链教程eth源码分析p2p-udp.go源码分析(一)

兄弟连区块链教程eth源码分析p2p-udp.go源码分析(一),2018年下半年,区块链行业正逐渐褪去发展之初的浮躁、回归理性,表面上看相关人才需求与身价似乎正在回落。但事实上,正是初期泡沫的渐退,让人们更多的关注点放在了区块链真正的技术之上。p2p的网络发现协议使用了Kademlia protocol 来处理网络的节点发现。节点查找和节点更新。Kademlia protocol使用了UDP协议来进行网络通信。阅读这部分的代码建议先看看references里面的Kademlia协议简介来看看什么是Kademlia协议。首先看看数据结构。 网络传输了4种数据包(UDP协议是基于报文的协议。传输的是一个一个数据包),分别是ping,pong,findnode和neighbors。 下面分别定义...阅读全文

博文 2018-10-17 17:34:42 兄弟连区块链培训

兄弟连区块链教程以太坊源码分析core-state-process源码分析

StateTransition 状态转换模型 /* The State Transitioning Model 状态转换模型 A state transition is a change made when a transaction is applied to the current world state 状态转换 是指用当前的world state来执行交易,并改变当前的world state The state transitioning model does all all the necessary work to work out a valid new state root. 状态转换做了所有所需的工作来产生一个新的有效的state root 1) Nonce handlin...阅读全文

博文 2018-10-22 15:34:38 兄弟连区块链培训

兄弟连区块链教程以太坊源码分析core-state-process源码分析(二)

兄弟连区块链教程以太坊源码分析core-state-process源码分析(二):关于g0的计算,在黄皮书上由详细的介绍和黄皮书有一定出入的部分在于if contractCreation && homestead {igas.SetUint64(params.TxGasContractCreation) 这是因为 Gtxcreate+Gtransaction = TxGasContractCreation func IntrinsicGas(data []byte, contractCreation, homestead bool) *big.Int { igas := new(big.Int) if contractCreation && homestead { igas.SetUint6...阅读全文

博文 2018-10-22 16:35:00 兄弟连区块链培训

Tikye(TIY)知识科普之技术架构

设计思路考虑到Tikye对于区块链系统的性能、安全等需求远比一般的公有链性能更高,为了保证交易场景下的公开透明,交易各方皆能参与到区块链的共同监管与治理,同时能兼顾高频交易需要较高的TPS,我们设计了一套支持可插拔、可扩展的高性能应用级区块链系统。在下文中,该区块链系统简称Tikye。该系统为开发者提供便捷的SDK工具包,同时还将为外部系统提供可兼容的API接口,基于Tikye的特性解决传统问题。主要依靠智能合约来解决基于Tikye的事务性问题,智能合约在区块链环境中运行,保证了事务执行的可行性、高效性和安全性。为了区块链系统的处理能力,我们通过引入多条平行链组成链路由系统。平行链和主链保持既独立又统一的关系,所有平行链可以拥有自己的超级节点、状态机和原始交易数据,由主链来存储关键数据以及完...阅读全文

博文 2019-09-19 11:02:46 逗币狗

兄弟连区块链教程btcpool矿池源码分析slparser

btcpool矿池-slparser(share log parser)模块解析 核心机制总结 支持三种功能: 指定Date和UID,将打印指定日期指定用户的share信息到stdout UID=0时,将打印指定日期所有用户的share信息 指定Date但未指定UID,读取指定日期sharelog,统计数据并写入数据库 按Worker、user、pool三个维度统计:Accept1h、Accept1d、score1h、score1d、Reject1h、Reject1d 数据库仅保留最近3个月统计数据 如果Date和UID均未指定,将监听文件变化,读取share并统计数据,每15秒写入数据库 同时启动Httpd服务,开放ServerStatus和WorkerStatus slparser命令使...阅读全文

博文 2018-10-26 15:34:41 兄弟连区块链培训

兄弟连区块链教程Fabric1.0源代码分析configupdate处理通道配置更新

区块链教程Fabric1.0源代码分析configupdate处理通道配置更新,2018年下半年,区块链行业正逐渐褪去发展之初的浮躁、回归理性,表面上看相关人才需求与身价似乎正在回落。但事实上,正是初期泡沫的渐退,让人们更多的关注点放在了区块链真正的技术之上。 Fabric 1.0源代码笔记 之 Orderer #configupdate(处理通道配置更新) 1、configupdate概述 configupdate,用于接收配置交易,并处理通道配置更新。相关代码在orderer/configupdate目录。 2、SupportManager接口定义及实现 2.1、SupportManager接口定义 type SupportManager interface { GetChain(cha...阅读全文

博文 2018-11-05 15:35:07 兄弟连区块链培训

区块链教程Fabric1.0源代码分析流言算法Gossip服务端一

区块链教程Fabric1.0源代码分析流言算法Gossip服务端一,2018年下半年,区块链行业正逐渐褪去发展之初的浮躁、回归理性,表面上看相关人才需求与身价似乎正在回落。但事实上,正是初期泡沫的渐退,让人们更多的关注点放在了区块链真正的技术之上。 Fabric 1.0源代码笔记 之 gossip(流言算法) #GossipServer(Gossip服务端) 1、GossipServer概述 GossipServer相关代码,分布在protos/gossip、gossip/comm目录下。目录结构如下: protos/gossip目录: * message.pb.go,GossipClient接口定义及实现,GossipServer接口定义。 gossip/comm目录: * comm.go...阅读全文

博文 2018-10-31 17:34:41 兄弟连区块链

兄弟连区块链教程btcpool矿池源码分析BlockMaker模块解析

兄弟连区块链教程btcpool矿池源码分析BlockMaker模块解析,2018年下半年,区块链行业正逐渐褪去发展之初的浮躁、回归理性,表面上看相关人才需求与身价似乎正在回落。但事实上,正是初期泡沫的渐退,让人们更多的关注点放在了区块链真正的技术之上。# btcpool矿池-BlockMaker模块解析## 核心机制总结* blkmaker可以连多个bitcoind节点* blkmaker监听和接收4类消息:RAWGBT、STRATUM_JOB、SOLVED_SHARE和NMC_SOLVED_SHARE* 监听RAWGBT目的为获取gbtHash/交易列表,用于构建Block,gbtHash和vtxs写入rawGbtMap_* rawGbtMap_保存最近100条gbtHash/vtxs对*...阅读全文

博文 2018-10-16 18:34:41 兄弟连区块链培训

兄弟连区块链教程以太坊源码分析chain-indexer区块链索引二

Start方法。 这个方法在eth协议启动的时候被调用,这个方法接收两个参数,一个是当前的区块头,一个是事件订阅器,通过这个订阅器可以获取区块链的改变信息。 eth.bloomIndexer.Start(eth.blockchain.CurrentHeader(), eth.blockchain.SubscribeChainEvent) // Start creates a goroutine to feed chain head events into the indexer for // cascading background processing. Children do not need to be started, they // are notified about new e...阅读全文

博文 2018-10-19 11:34:46 兄弟连区块链培训

兄弟连区块链技术培训分享Go语言之时间编程

互联网二十多年,已到十字路口。区块链出现前的互联网被称为古典互联网,而应用区块链技术的互联网才进入了后互联网时代。作为一项新兴的技术,区块链无疑正处于风口浪尖之上,其发展前景于普通大众而言也终将是利好。但目前由于区块链技术处于发展早期阶段,存在技术成熟度、落地应用场景有限等问题,兄弟连教育建议用户在选择专业Go语言+区块链培训机构前应进行仔细考量与辨别。编程离不开时间,时间管理,严格的说分成两块,一个是当前的时刻,对应的是一个点,还有是一段时间间隔,本文简单的讲讲go的时间相关的编程,比较简单。golang对时间的支持,是package time做的事儿,里面有好多的函数。熟悉Linux下C编程的就是time函数的返回值: #include time_t now = time(NULL);g...阅读全文

博文 2018-08-27 11:34:58 兄弟连区块链培训

区块链教程Fabric1.0源代码分析Fabric1.0.4go代码量统计

区块链教程Fabric1.0源代码分析Fabric1.0.4go代码量统计,2018年下半年,区块链行业正逐渐褪去发展之初的浮躁、回归理性,表面上看相关人才需求与身价似乎正在回落。但事实上,正是初期泡沫的渐退,让人们更多的关注点放在了区块链真正的技术之上。 Fabric 1.0源代码笔记 之Fabric 1.0.4 go代码量统计 1、概述 除test、vendor、mocks、example、protos外,go核心代码文件341个,核心代码行63433行。 find ./ |grep -vE 'test|vendor|mocks|example|protos' | grep '\.go$' | wc -l 341 wc -l `find ./ |grep -vE 'test|vendor...阅读全文

博文 2018-11-09 16:36:00 xdl区块链

Go基础系列:为select设置超时时间

Go channel系列: channel入门 为select设置超时时间 nil channel用法示例 双层channel用法示例 指定goroutine的执行顺序 After() 谁也无法保证某些情况下的select是否会永久阻塞。很多时候都需要设置一下select的超时时间,可以借助time包的After()实现。 time.After()的定义如下: func After(d Duration) <-chan Time After()函数接受一个时长d,然后它After()等待d时长,等待时间到后,将等待完成时所处时间点写入到channel中并返回这个只读channel。 所以,将该函数赋值给一个变量时,这个变量是一个只读channel,而channel是一个指针类型的数据,所以它...阅读全文

博文 2018-11-23 09:12:10 f-ck-need-u

区块链教程Fabric1.0源代码分析blockfile区块文件存储2

//构造blockIndex func newBlockIndex(indexConfig *blkstorage.IndexConfig, db *leveldbhelper.DBHandle) *blockIndex //获取最后一个块索引(或编号),取key为"indexCheckpointKey"的值,即为最新的区块编号 func (index *blockIndex) getLastBlockIndexed() (uint64, error) func (index *blockIndex) indexBlock(blockIdxInfo *blockIdxInfo) error //索引区块 //根据区块哈希,获取文件区块指针 func (index *blockIndex) g...阅读全文

博文 2018-10-11 15:35:09 兄弟连区块链培训

兄弟连区块链培训分享Go语言压缩与解压

2018年第一季度,区块链相关人才的招聘需求已达到2017年同期的9.7倍,发布区块链相关岗位的公司数量同比增长4.6倍。 兄弟连教育Go全栈与区块链培训课程是由清华、微软和谷歌名师历时半年时间研发出的独一无二的体系化课程。压缩文件package mainimport ( "fmt" "os" "io" "archive/tar" "compress/gzip")func main() { // file write fw, err := os.Create("tar/lin_golang_src.tar.gz") if err != nil { panic(err) } defer fw.Close() // gzip write gw := gzip.NewWriter(fw) defe...阅读全文

博文 2018-08-29 16:35:06 兄弟连区块链培训

以太坊源码分析:fetcher模块和区块传播

前言 这篇文章从区块传播策略入手,介绍新区块是如何传播到远端节点,以及新区块加入到远端节点本地链的过程,同时会介绍fetcher模块,fetcher的功能是处理Peer通知的区块信息。在介绍过程中,还会涉及到p2p,eth等模块,不会专门介绍,而是专注区块的传播和加入区块链的过程。 当前代码是以太坊Release 1.8,如果版本不同,代码上可能存在差异。 总体过程和传播策略 本节从宏观角度介绍,节点产生区块后,为了传播给远端节点做了啥,远端节点收到区块后又做了什么,每个节点都连接了很多Peer,它传播的策略是什么样的? 总体流程和策略可以总结为,传播给远端Peer节点,Peer验证区块无误后,加入到本地区块链,继续传播新区块信息。具体过程如下。 先看总体过程。产生区块后,miner模块会发...阅读全文

博文 2018-11-17 13:34:43 大彬

Kafka 重平衡机制

微信公众号「后端进阶」,专注后端技术分享:Java、Golang、WEB框架、分布式中间件、服务治理等等。 当集群中有新成员加入,或者某些主题增加了分区之后,消费者是怎么进行重新分配消费的?这里就涉及到重平衡(Rebalance)的概念,下面我就给大家讲解一下什么是 Kafka 重平衡机制,我尽量做到图文并茂通俗易懂。 重平衡的作用 重平衡跟消费组紧密相关,它保证了消费组成员分配分区可以做到公平分配,也是消费组模型的实现,消费组模型如下: image.png 从图中可以找到消费组模型的几个概念: 同一个消费组,一个分区只能被一个消费者订阅消费,但一个消费者可订阅多个分区,也即是每条消息只会被同一个消费组的某一个消费者消费,确保不会被重复消费; 一个分区可被不同消费组订阅,这里有种特殊情况,加...阅读全文

博文 2019-10-31 20:33:01 aside section._1OhGeD

golang-sync.WaitGroup

使用 go 语言提供的方式处理:sync.WaitGroup package main import ( "fmt" "sync" ) /** channel 例子六: 接收方,接收完毕的时候,通知发送我接收完毕了! 使用 Go 语言提供的 sync.WaitGroup 的方式,来等待任务结束处理!之前处理方式比较繁琐 // 使用 go 语言提供的等待组,等待组 var wq sync.WaitGroup // 表示有多少个任务,比如添加20个任务 wq.Add(20) // 每个任务做完后,在任务做完后调用 wq.Done() // 等待任务做完,在任务开始后调用 wq.Wait() */ // c 这个chan 表示数据 func donWorker6(id int, c chan in...阅读全文

博文 2019-12-18 12:32:43 爱吃豆包

兄弟连区块链入门教程以太坊源码分析以太坊随机数生成方式二

区块链入门教程以太坊源码分析以太坊随机数生成方式二。激励 RNG的周期非常短,例如一个小时20个生成周期,如果没有周期的利润是0.001%,一个月的盈利会达到0.00001 20 24 30 = 0.144。 为了达到14.4%每个月的盈利,并且RNG平均有n个参与者,运行智能合约C的费用为 n 3 500 gasPrice + Ccost.(CCost是合约内部的gas消费,包括计算和存储)假设每个随机值平均有r个请求,每个请求的费用是 p ETH, 那么收入是 rp. 所以每个参与者每一次参与会收到rp - 1500n gasPrice - Ccost) / n。当前的gasPrice是10 szabo, 合约的消费大概是1500n gas, 所以大概的净收入是(rp/n-0.03)ET...阅读全文

博文 2018-10-26 16:34:49 兄弟连区块链培训

兄弟连区块链教程Fabric1.0源代码分析Tx(Transaction 交易)一

区块链教程Fabric1.0源代码分析Tx(Transaction 交易)一,2018年下半年,区块链行业正逐渐褪去发展之初的浮躁、回归理性,表面上看相关人才需求与身价似乎正在回落。但事实上,正是初期泡沫的渐退,让人们更多的关注点放在了区块链真正的技术之上。 # Fabric 1.0源代码笔记 之 Tx(Transaction 交易) ## 1、Tx概述 Tx,即Transaction,交易或事务。 Tx代码分布目录结构如下: * protos/common/common.pb.go,交易的封装即Envelope结构体。也包括Payload、Header、ChannelHeader和SignatureHeader。 * protos/utils目录,交易相关部分工具函数,包括txutils....阅读全文

博文 2018-11-08 15:52:38 ITXDL

千锋扣丁学堂浅谈为什么区块链用go语言开发

今天千锋扣丁学堂区块链培训老师给大家分享一篇关于为什么区块链用go语言开发?首先Go语言现在常常被用来做去中心化系统(decentralisedsystem)。其他类型的公司也都把Go用在产品的核心模块中,并且它在网站开发中也占据了一席之地。 我们在决定做Karachain的时候,考量(benchmark)了C,C++,Java,甚至NodeJs,我们也试着用一些算法来作为考量标准。而现在,我表示我们正在用Go来实现此目标,并且感觉不错。现在建造一个区块链,恰如当时建造一个操作系统,我们在建造像区块链平台这样复杂的东西时,把注意力放在了那些核心问题上。经过差不多4周的开发与探索,我们才发现这门奇妙的语言是如何优雅地解答了我们的难题。Go语言很简单。并且每次你中途休息(cessation)之后...阅读全文

博文 2019-07-02 19:32:40 扣丁学堂

一次UDP通迅的问题排查

通迅模型 (A-->B-->A):A通过UDP发送数据给B(A可以是指定目的地,也可以是广播发送消息给B),B收到消息后根据来源地址和端口向A回发消息,就这么简单的一个通迅过程。 关于golang udp方面的讲解可以参考下https://colobu.com/2016/10/19/Go-UDP-Programming/这篇文件,讲的挺详细。什么时候udp socket是connected状态,什么时候是unconnected状态,什么时候用read/write,什么时候用readFromUDP/writeToUDP都有说明,写的挺好。 来段code demo吧 服务端: func main() { // 创建监听 sock, err := net.ListenUDP("udp4", &ne...阅读全文

Go 通道

无缓冲区通道 通过make(chan xxx)创建,没有设置缓冲区大小,这种类型的通道会在两种情况下导致阻塞: 通道中无数据,但执行通道读操作。 执行通道写操作,但是无协程从通道中读取数据。 // 情况1 func ReadNoDataFromNoBufCh() { noBufCh := make(chan int) <-noBufCh println("read from no buffer channel success") } // 情况2 func WriteNoBufCh() { ch := make(chan int) ch <- 1 println("write success no block") } 有缓冲区通道 通过make(chan xxx, int)创建,并设置了缓冲...阅读全文

博文 2020-03-08 13:32:39 xiongkun01

golang-channel

缓冲的 chan, make(chan int, 缓冲大小): 表示满了 缓冲大小后 就开始堵塞,无法在往 管道 塞入数据 不带缓冲区 chan,make(chan int) : 就是放入数据之后,没有取出这个数据就无法在继续放入数据 cap(ch1) 可以查看缓冲区长度 len(ch1) 可以查看缓冲区有多少未读的缓存数据 例子一 package main import ( "fmt" "time" ) // 理念:不要通过共享内存来通信;通过通信来共享内存 /** channel 例子一 channel 既然有了发送方, 就必须要有接收方!!! */ func worker(c chan int) { for { // 从 channel 里面获取数据,赋值给 n n := <-c fm...阅读全文

为什么区块链是不可篡改的

区块链的数据结构是由包含事务信息的块按远近顺序排列的。块按远近顺序在这个链中链接,每个块都指向前面的块。 区块链通常被视为一个垂直堆栈,第一个块是堆栈底部的第一个块,然后将每个块放在前一个块的顶部。使用堆栈将块依次堆叠的概念可视化之后,我们可以使用一些术语,如“高度”来表示块与第一个块之间的距离;和“top”或“top”表示新添加的块。 每个块头生成一个SHA256加密散列来生成散列值。使用这个散列值,可以标识区块链中相应的块。同时,每个块可以通过其块头的“父块哈希值”字段引用前一个块(父块)。更多区块链知识 也就是说,每个块头包含其父块散列值。这样,通过将每个块链接到相应父块的散列序列,就创建了一个返回到第一个块(创建块)的链。 虽然每个块只有一个父块,但它可以临时有多个子块。每个子块具有...阅读全文

博文 2019-11-21 16:02:41 真是很秃ran

区块链教程区块链信息安全3椭圆曲线加解密及签名算法的技术原理二

兄弟连区块链教程区块链信息安全3椭圆曲线加解密及签名算法的技术原理二。 # 椭圆曲线加解密及签名算法的技术原理及其Go语言实现 ### 椭圆曲线加解密算法原理 建立基于椭圆曲线的加密机制,需要找到类似RSA质因子分解或其他求离散对数这样的难题。 而椭圆曲线上的已知G和xG求x,是非常困难的,此即为椭圆曲线上的的离散对数问题。 此处x即为私钥,xG即为公钥。 椭圆曲线加密算法原理如下: 设私钥、公钥分别为k、K,即K = kG,其中G为G点。 公钥加密: 选择随机数r,将消息M生成密文C,该密文是一个点对,即: C = {rG, M+rK},其中K为公钥 私钥解密: M + rK - k(rG) = M + r(kG) - k(rG) = M 其中k、K分别为私钥、公钥。 ### 椭圆曲线签名...阅读全文

博文 2018-11-09 14:17:07 ITXDL

分析该缓冲通道wrote和read的数字的顺序

分析该缓冲通道wrote和read的数字的顺序 package main import ( "fmt" "time" ) func write(ch chan int) { for i := 0; i < 5; i++ { ch <- i fmt.Println("successfully wrote", i, "to ch") } close(ch) } func main() { ch := make(chan int, 2) go write(ch) time.Sleep(2 * time.Second) for v := range ch { fmt.Println("read value", v, "from ch") time.Sleep(2 * time.Second) } }...阅读全文

博文 2019-01-02 09:34:45 SmallForest

25. 学习 Go 协程:详解信道/通道

Hi,大家好,我是明哥。 在自己学习 Golang 的这段时间里,我写了详细的学习笔记放在我的个人微信公众号 《Go编程时光》,对于 Go 语言,我也算是个初学者,因此写的东西应该会比较适合刚接触的同学,如果你也是刚学习 Go 语言,不防关注一下,一起学习,一起成长。 我的在线博客:http://golang.iswbm.com我的 Github:github.com/iswbm/GolangCodingTime Go 语言之所以开始流行起来,很大一部分原因是因为它自带的并发机制。 如果说 goroutine 是 Go语言程序的并发体的话,那么 channel(信道) 就是 它们之间的通信机制。channel,是一个可以让一个 goroutine 与另一个 goroutine 传输信息的通道...阅读全文

博文 2020-06-02 08:32:41 Python编程时光

兄弟连区块链教程以太坊源码分析chain-indexer区块链索引一

chain_indexer 区块链索引 chain_indexer.go 源码解析 chain_indexer 顾名思义, 就是用来给区块链创建索引的功能。 之前在eth协议的时候,介绍过BloomIndexer的功能,其实BloomIndexer是chain_indexer的一个特殊的实现, 可以理解为派生类, 主要的功能其实实在chain_indexer这里面实现的。虽说是派生类,但是chain_indexer其实就只被BloomIndexer使用。也就是给区块链的布隆过滤器创建了索引,以便快速的响应用户的日志搜索功能。 下面就来分析这部分的代码。 数据结构 // ChainIndexerBackend defines the methods needed to process chai...阅读全文

博文 2018-10-19 10:34:39 兄弟连区块链培训

兄弟连区块链教程Fabric1.0源代码分析gRPC(Fabric中注册的gRPC Service)一

兄弟连区块链教程Fabric1.0源代码分析gRPC(Fabric中注册的gRPC Service)一,2018年下半年,区块链行业正逐渐褪去发展之初的浮躁、回归理性,表面上看相关人才需求与身价似乎正在回落。但事实上,正是初期泡沫的渐退,让人们更多的关注点放在了区块链真正的技术之上。 # Fabric 1.0源代码笔记 之 -gRPC(Fabric中注册的gRPC Service) Peer节点中注册的gRPC Service,包括: * Events Service(事件服务):Chat * Admin Service(管理服务):GetStatus、StartServer、GetModuleLogLevel、SetModuleLogLevel、RevertLogLevels * Endo...阅读全文

博文 2018-11-08 14:47:33 ITXDL

兄弟连区块链入门教程eth源码分析p2p-udp.go源码分析(二)

ping方法与pending的处理,之前谈到了pending是等待一个reply。 这里通过代码来分析是如何实现等待reply的。pending方法把pending结构体发送给addpending. 然后等待消息的处理和接收。 // ping sends a ping message to the given node and waits for a reply. func (t *udp) ping(toid NodeID, toaddr *net.UDPAddr) error { // TODO: maybe check for ReplyTo field in callback to measure RTT errc := t.pending(toid, pongPacket, fun...阅读全文

博文 2018-10-17 14:34:42 兄弟连区块链培训

兄弟连区块链入门教程以太坊源码分析event源码分析

兄弟连区块链入门教程以太坊源码分析event源码分析,2018年下半年,区块链行业正逐渐褪去发展之初的浮躁、回归理性,表面上看相关人才需求与身价似乎正在回落。但事实上,正是初期泡沫的渐退,让人们更多的关注点放在了区块链真正的技术之上。 event包实现了同一个进程内部的事件发布和订阅模式。## event.go目前这部分代码被标记为Deprecated,告知用户使用Feed这个对象。 不过在代码中任然有使用。 而且这部分的代码也不多。 就简单介绍一下。数据结构TypeMux是主要的使用。 subm记录了所有的订阅者。 可以看到每中类型都可以有很多的订阅者。 // TypeMuxEvent is a time-tagged notification pushed to subscribers....阅读全文

博文 2018-10-23 16:34:49 兄弟连区块链培训

深入浅出谈以太坊智能合约

链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载。 1什么是合约? 合约是代码(它的功能)和数据(它的状态)的集合,存在于以太坊区块链的特定地址。 合约账户能够在彼此之间传递信息,进行图灵完备的运算。合约依靠被称作以太坊虚拟机(EVM) 字节代码(以太坊特有的二进制格式)上的区块链运行。 合约很典型地用诸如Solidity等高级语言写成,然后编译成字节代码上传到区块链上。 也有其他语言可以用于编写智能合约如Serpent和LLL,在下一节会进一步阐述。去中心化应用开发资源列出了综合的开发环境,帮助你用这些语言开发的开发者工具,提供测试和部署支持等功能。 2以太坊高级语言 合约依靠被称作以太坊虚拟机(EVM) 字节代码(以太坊特有的二进制格式)上的区块链运行。然而,...阅读全文

博文 2019-09-27 17:02:46 链客

区块链入门教程以太坊源码分析core-state源码分析(二)

兄弟连区块链入门教程以太坊源码分析core-state源码分析,2018年下半年,区块链行业正逐渐褪去发展之初的浮躁、回归理性,表面上看相关人才需求与身价似乎正在回落。但事实上,正是初期泡沫的渐退,让人们更多的关注点放在了区块链真正的技术之上。 ## statedb.go stateDB用来存储以太坊中关于merkle trie的所有内容。 StateDB负责缓存和存储嵌套状态。 这是检索合约和账户的一般查询界面: 数据结构 type StateDB struct { db Database // 后端的数据库 trie Trie // trie树 main account trie // This map holds 'live' objects, which will get modif...阅读全文

博文 2018-10-22 16:35:01 兄弟连区块链培训

[CatServer 服务器框架] Group 新调度实现

# 调度包实现 ## 实现 ### 调度定义 > 采用 生产消费 的处理方式 > > 1. 创建多个消费者 > 2. 将生产的值发送给消费者 > 3. 在关闭消费者的情况下挂起生产者 > 4. 在无法消费的情况下储存到缓冲队列,并通知回调函数. > 5. 关闭调度时等待缓冲队列与剩余调度执行完成. > > 注: > > >1. 超时回调会挂起调度 > >2. 在回调中调用 Close/SetWorker 需要携程运行 #### 1. 创建消费者 > 创建一个缓冲为 n 的消费者通道 ```go var consumer chan interface{} // 消费者 consumer = make(chan interface{}, n) ``` #### 2. 创建生产者 ```go va...阅读全文

Parse Bitcoin Ledger To Elasticsearch

Dump Bitcoin Mainnet ledger to elasticsearch. constructed specify format so we can query balance and utxo, the main propose of the repo is for wallet or block explorer Install Environment require: Golang (compile) Dep (package dependency) Elasticsearch (database) Before clone the repo, I wanna let claim that there is a bug I have verified the btcd,...阅读全文

博文 2018-08-14 17:35:19 老码农不上班

2020 区块链 golang 版本(7)

封面 我们知道比特币的安全性来源 hash 加密和共识机制,所以我们今天聊一聊比特币中的共识机制。 分布式共识 分布式的 hash 表,系统有很多计算机,这些计算机共同来维护一个 hash 表。 Alice -> 12345 下面介绍关于分布式两个结论 关于分布式 FLP impossibility result 在一个异步系统里(网络延时没有上限),即使一个成员是有问题,也就是无法取得共识。 CAP Theorem C(Consistency) A(Availability) P(Partition tolerance) 任何一个分布系统,这个三个性质中最多只能满足两个,无法全部满足以上3性质。 分布式共识一个比较著名协议我 Paxos,Paxos 又能一直没有达到共识。这些理论我们简单了...阅读全文

兄弟连区块链教程Fabric1.0源代码分析Tx(Transaction 交易)二

## 4、交易相关部分工具函数(protos/utils包) putils更详细内容,参考:Fabric 1.0源代码笔记 之 putils(protos/utils工具包) ## 5、RWSet(读写集) RWSet更详细内容,参考:Fabric 1.0源代码笔记 之 Tx #RWSet(读写集) ## 6、version.Height结构体及方法 ```go type Height struct { BlockNum uint64 //区块编号 TxNum uint64 //交易编号 } func NewHeight(blockNum, txNum uint64) *Height //构造Height func NewHeightFromBytes(b []byte) (*Height,...阅读全文

博文 2018-11-08 16:04:00 ITXDL

兄弟连区块链教程Fabric1.0源代码分析blockfile区块文件存储一

Fabric 1.0源代码笔记 之 blockfile(区块文件存储) 1、blockfile概述 blockfile,即Fabric区块链区块文件存储,默认目录/var/hyperledger/production/ledgersData/chains,含index和chains两个子目录。其中index为索引目录,采用leveldb实现。而chains为各ledger的区块链文件,子目录以ledgerid为名,使用文件系统实现。区块文件以blockfile_为前缀,最大大小默认64M。 blockfile,相关代码集中在common/ledger/blkstorage/fsblkstorage目录,目录结构如下: blockfile_mgr.go,blockfileMgr和checkpo...阅读全文

博文 2018-10-26 16:34:48 兄弟连区块链培训

golang context

最初接触golang http源码的时候就发现有一个比较特别的package context,并且在后面学习etcd源码的时候发现几乎每一个回调相关的函数都会有一个ctx参数,顺便了解下它的实现原理以及设计思想。 context 的作用 context结合自己工作实践,我认为context主要有以下两个作用: 1.传递数据 2.递归的取消子任务   context包在golang源码的golang.org/x/net/context目录下,context主要用在结束若干个相互具有父子(主任务子任务)关系的goroutine,context内部本身就是以一种树形递归的形式去组织各个context节点,父节点的取消,会递归的把取消信号发送给它的子节点。 Context接口的定义如下: type ...阅读全文

博文 2019-12-29 21:32:39 GGGGGGGG_8721

golang[39]-区块链-产生wif私钥

压缩公钥公钥一般来说是椭圆曲线上的x,y坐标拼接在一起的。压缩的公钥其实就是x的坐标。WIF 私钥产生本文链接: https://dreamerjonson.com/2018/12/09/golang-39-blockchain-generateprivatekeywif/版权声明: 本博客所有文章除特别声明外,均采用 CC BY 4.0 CN协议 许可协议。转载请注明出处...阅读全文

博文 2019-02-21 15:35:55 jonson_jackson

兄弟连区块链教程以太坊源码分析core-state源码分析(一)

兄弟连区块链教程以太坊源码分析core-state源码分析,core/state 包主要为以太坊的state trie提供了一层缓存层(cache) database主要提供了trie树的抽象,提供trie树的缓存和合约代码长度的缓存。journal主要提供了操作日志,以及操作回滚的功能。state_object是account对象的抽象,提供了账户的一些功能。statedb主要是提供了state trie的部分功能。 database.go database.go 提供了一个数据库的抽象。 数据结构 // Database wraps access to tries and contract code. type Database interface { // Accessing trie...阅读全文

博文 2018-10-22 16:35:00 兄弟连区块链培训

兄弟连区块链入门教程eth源码分析p2p-udp.go源码分析(二)

ping方法与pending的处理,之前谈到了pending是等待一个reply。 这里通过代码来分析是如何实现等待reply的。pending方法把pending结构体发送给addpending. 然后等待消息的处理和接收。 // ping sends a ping message to the given node and waits for a reply. func (t *udp) ping(toid NodeID, toaddr *net.UDPAddr) error { // TODO: maybe check for ReplyTo field in callback to measure RTT errc := t.pending(toid, pongPacket, fun...阅读全文

博文 2018-10-17 14:35:13 itxdl2006

2020 区块链 golang 版本(3)

封面 学区块链会不会过时 我们通过比特币了解到区块链,所以大家认为比特币的兴衰就代表区块链发展趋势,其实比特币只不过是区块链的一个最佳实践罢了。现在还是处于区块链的起步阶段。而且区块链无论在应用上还是技术上都还有广泛的空间。随着比特币出现之后以太坊的出现有推动了区块链的发展。 我们都知道在比特币中涵盖多种技术,今天我们就来谈一谈比特币的几个关键技术 密码学 比特币被称为加密货币,虽然所是加密货币,但是其实比特币的交易会会在全网广播。比特币中主要应用了密码学中的哈希和签名。 哈希运算 我们先说哈希运算,因为输入空间远远大于输出空间,所以不同值经过哈希运算得到哈希值相同是难免的。哈希值取值可能为 ,但是输入是无限空间,不同值经过哈希运算得到相同哈希值的现象叫做哈希碰撞。但是没有方法可以认为制造出...阅读全文

博文 2020-04-25 01:32:52 zidea