iOS开发HTTP协议简述

##1.TCP/IP 协议

国际标准化组织(ISO)定义了网络协议的基本框架,OSI模型制定的七层标准模型,分别是:应用层,表示层,会话层,传输层,网络层,数据链路层,物理层.

实际上互联网通讯使用的网络协议是TCP/IP网络协议

TCP/IP 是一个协议族,也是按照层次划分。共四层:应用层,传输层,互连网络层,网络接口层.

TCP/IP协议和OSI模型也并不冲突,TCP/IP协议中的应用层协议,就对应于OSI中的应用层,表示层,会话层

OSI网络协议模型,是一个参考模型,而TCP/IP协议是事实上的标准。

TCP/IP中有两个重要的协议,传输层的TCP协议和互连网络层的IP协议

传输层:多个协议,但最主要的是TCP和UDP协议.两则的区别在于TCP协议需要接收方反馈,UDP协议不需要接收方反馈.

TCP传输比UDP传送更可靠,但是TCP传输的效率就不如UDP

应用层的协议有很多,每一个协议代表一种类型的服务。HTTP协议,万维网服务。FTP协议,文件传送服务。POP3,邮件服务,SOAP协议webService服务

soap信息可以通过http协议包装后通过tcp或udp传输

###理解TCP/IP协议

1.socket
socket就是一个连接中的一个端点,一次通讯(连接)a,b端都会有一个socket。一个socket对应一个连接
HTTP: 超文本传送协议,属于应用层.

##HTTP协议

###1.URL

URL的全称是Uniform Resource Locator(统一资源定位符)

通过1个URL,能找到互联网上唯一的1个资源

URL就是资源的地址、位置,互联网上的每个资源都有一个唯一的URL

###2.URL中常见的协议

(1)HTTP

超文本传输协议,访问的是远程的网络资源,格式是http://

http协议是在网络开发中最常用的协议

(2)file

访问的是本地计算机上的资源,格式是file://(不用加主机地址)

(3)mailto

访问的是电子邮件地址,格式是mailto:

(4)FTP

访问的是共享主机的文件资源,格式是ftp://

访问远程的网络资源经常使用HTTP协议

HTTP的全称是Hypertext Transfer Protocol,超文本传输协议

(1)规定客户端和服务器之间的数据传输格式

(2)让客户端和服务器能有效地进行数据沟通

3.为什么选择使用HTTP?

(1)简单快速 因为HTTP协议简单,所以HTTP服务器的程序规模小,因而通信速度很快

(2)灵活 HTTP允许传输任意类型的数据

(3)HTTP 0.9和1.0使用非持续连接 限制每次连接只处理一个请求,服务器对客户端的请求做出响应后,马上断开连接,这种方式可以节省传输时间

4.HTTP的通信过程

要想使用HTTP协议向服务器索取数据,得先了解HTTP通信的完整过程

完整的http通信可以分为2大步骤

(1)请求:客户端向服务器索要数据

(2)响应:服务器返回客户端相应的数据

三、HTTP通信过程 - 请求和响应

1.HTTP通信过程 - 请求

HTTP协议规定:1个完整的由客户端发给服务器的HTTP请求中包含以下内容

请求行:包含了请求方法、请求资源路径、HTTP协议版本

GET /MJServer/resources/images/1.jpg HTTP/1.1

请求头:包含了对客户端的环境描述、客户端请求的主机地址等信息

Host: 192.168.1.105:8080 // 客户端想访问的服务器主机地址

User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9) Firefox/30.0// 客户端的类型,客户端的软件环境

Accept: text/html, /// 客户端所能接收的数据类型

Accept-Language: zh-cn // 客户端的语言环境

Accept-Encoding: gzip // 客户端支持的数据压缩格式

请求体:客户端发给服务器的具体数据,比如文件数据

2.HTTP通信过程 - 响应

客户端向服务器发送请求,服务器应当做出响应,即返回数据给客户端

HTTP协议规定:1个完整的HTTP响应中包含以下内容:

状态行:包含了HTTP协议版本、状态码、状态英文名称

HTTP/1.1 200 OK

响应头:包含了对服务器的描述、对返回数据的描述

Server: Apache-Coyote/1.1 // 服务器的类型

Content-Type: image/jpeg // 返回数据的类型

Content-Length: 56811 // 返回数据的长度

Date: Mon, 23 Jun 2014 12:54:52 GMT // 响应的时间

实体内容:服务器返回给客户端的具体数据,比如文件数据

4.常见的响应状态码

四、发送HTTP请求的方法

1.简单说明

在HTTP/1.1协议中,定义了8种发送http请求的方法

GET、POST、OPTIONS、HEAD、PUT、DELETE、TRACE、CONNECT、PATCH

根据HTTP协议的设计初衷,不同的方法对资源有不同的操作方式

PUT :增

DELETE :删

POST:改

GET:查

提示:最常用的是GET和POST(实际上GET和POST都能办到增删改查)

2.get和post请求

要想使用GET和POST请求跟服务器进行交互,得先了解一个概念:参数就是传递给服务器的具体数据,比如登录时的帐号、密码

GET和POST对比:GET和POST的主要区别表现在数据传递上

GET

在请求URL后面以?的形式跟上发给服务器的参数,多个参数之间用&隔开,比如http://ww.test.com/login?username=123&pwd=234&type=JSON

注意:由于浏览器和服务器对URL长度有限制,因此在URL后面附带的参数是有限制的,通常不能超过1KB

POST

发给服务器的参数全部放在请求体中

理论上,POST传递的数据量没有限制(具体还得看服务器的处理能力)

09/12/2018 15:10 下午 posted in  HTTP

使用JSONRPC创建账户

创建成功返回的JSON:
创建是用Action进行的,包含三个action,newaccount,buyram,delegatebw,
先对各自的abi进行参数对齐 然后进行abi_json_to_bin请求 最后进行整合请求

{
    "timestamp": "2018-09-10T09:33:29.000",
    "producer": "funnyhamster",
    "confirmed": 0,
    "previous": "00d06974a6485b5e6c80d804313d6c0058870848f103735fb24ae63851a61f66",
    "transaction_mroot": "00eb3fbea28360f5ab26cae9cf50c081baf5579800aa6062f059808ad9b44d7a",
    "action_mroot": "10a2e5ea43847603f2d68bc5b403eea5ec744b70d38ff1d73e859fbe9413e6c6",
    "schedule_version": 217,
    "new_producers": null,
    "header_extensions": [],
    "producer_signature": "SIG_K1_K26xvdaxUhQcE6Cga1fQfDLKxVYKpAG9nNk8isA4Pby8ZH2Jp8y8Z6ki8p3ZHAvuBFTJDrNTAW6va9Xbd1R7E8DoosQdXE",
    "transactions": [
        {
            "status": "executed",
            "cpu_usage_us": 7238,
            "net_usage_words": 43,
            "trx": {
                "id": "929ecaca3aa6aa09a515239ff79e78b4df62bf87809a45a7baf2848696c3f094",
                "signatures": [
                    "SIG_K1_KVJz9woQUmHRCot6prUeeY3H8vjZBSStUhefQhrmzsCDKS8MkqYV2ANgfPeSpdEgmAnqX39WnKraCGiwJYedzKkbu5nBnS"
                ],
                "compression": "none",
                "packed_context_free_data": "",
                "context_free_data": [],
                "packed_trx": "e03a965b2868e3b6720100000000030000000000ea305500409e9a2264b89a0150c810611a17b58b00000000a8ed32326650c810611a17b58b208269a69996b1ca01000000010002aa1bf6ea68794eb7ad364ea9e3438171866a557f1db49f596c67eab2a6a0d7230100000001000000010002aa1bf6ea68794eb7ad364ea9e3438171866a557f1db49f596c67eab2a6a0d723010000000000000000ea3055000000004873bd3e0150c810611a17b58b00000000a8ed32322050c810611a17b58b208269a69996b1caa08601000000000004454f53000000000000000000ea305500003f2a1ba6a24a0150c810611a17b58b00000000a8ed32323150c810611a17b58b208269a69996b1caa08601000000000004454f5300000000a08601000000000004454f53000000000100",
                "transaction": {
                    "expiration": "2018-09-10T09:35:28",
                    "ref_block_num": 26664,
                    "ref_block_prefix": 24295139,
                    "max_net_usage_words": 0,
                    "max_cpu_usage_ms": 0,
                    "delay_sec": 0,
                    "context_free_actions": [],
                    "actions": [
                        {
                            "account": "eosio",
                            "name": "newaccount",
                            "authorization": [
                                {
                                    "actor": "liulian12345",
                                    "permission": "active"
                                }
                            ],
                            "data": {
                                "creator": "liulian12345",
                                "name": "testhahaha12",
                                "owner": {
                                    "threshold": 1,
                                    "keys": [
                                        {
                                            "key": "EOS6BQZmWhPKZLVg4YDcR6KdrYb1dqjDAWxyGPHRTD6mpqJ1dACAp",
                                            "weight": 1
                                        }
                                    ],
                                    "accounts": [],
                                    "waits": []
                                },
                                "active": {
                                    "threshold": 1,
                                    "keys": [
                                        {
                                            "key": "EOS6BQZmWhPKZLVg4YDcR6KdrYb1dqjDAWxyGPHRTD6mpqJ1dACAp",
                                            "weight": 1
                                        }
                                    ],
                                    "accounts": [],
                                    "waits": []
                                }
                            },
                            "hex_data": "50c810611a17b58b208269a69996b1ca01000000010002aa1bf6ea68794eb7ad364ea9e3438171866a557f1db49f596c67eab2a6a0d7230100000001000000010002aa1bf6ea68794eb7ad364ea9e3438171866a557f1db49f596c67eab2a6a0d72301000000"
                        },
                        {
                            "account": "eosio",
                            "name": "buyram",
                            "authorization": [
                                {
                                    "actor": "liulian12345",
                                    "permission": "active"
                                }
                            ],
                            "data": {
                                "payer": "liulian12345",
                                "receiver": "testhahaha12",
                                "quant": "10.0000 EOS"
                            },
                            "hex_data": "50c810611a17b58b208269a69996b1caa08601000000000004454f5300000000"
                        },
                        {
                            "account": "eosio",
                            "name": "delegatebw",
                            "authorization": [
                                {
                                    "actor": "liulian12345",
                                    "permission": "active"
                                }
                            ],
                            "data": {
                                "from": "liulian12345",
                                "receiver": "testhahaha12",
                                "stake_net_quantity": "10.0000 EOS",
                                "stake_cpu_quantity": "10.0000 EOS",
                                "transfer": 1
                            },
                            "hex_data": "50c810611a17b58b208269a69996b1caa08601000000000004454f5300000000a08601000000000004454f530000000001"
                        }
                    ],
                    "transaction_extensions": []
                }
            }
        }
    ],
    "block_extensions": [],
    "id": "00d06975eb6fb6c7c281c3f68819489c27a2f876e3820f8bc37bb09f09f6d4ef",
    "block_num": 13658485,
    "ref_block_prefix": 4140007874
}
09/10/2018 16:40 下午 posted in  EOS

EOS开发资料备注

09/06/2018 15:26 下午 posted in  EOS

有代理导致的Cocoapods连接失败错误的解决办法

From:https://www.jianshu.com/p/118130ec55cf

pod拒绝连接 遇到如下错误:

错误描述 :
[!] /usr/bin/git clone https://github.com/CocoaPods/Specs.git master --progress

Cloning into 'master'...
fatal: unable to access 'https://github.com/CocoaPods/Specs.git/': Failed to connect to 127.0.0.1 port 1080: Connection refused

第一☝️:
查询是否使用代理: git config --global http.proxy
取消掉代理: git config --global --unset http.proxy

结果我发现不管用,

第二☝️:
查看你的git配置
终端输入: git config --global -l
下面👇就是说的问题咯,

If you have nothing related to https proxy like https_proxy=... the problem is not here.

If you have something related to https proxy then remove it from the file ~/.gitconfig and try again

就是说如果没有使用代理,那可能问题不在代理这里,删除 ~/.gitconfig 这个文件。
(如果没显示快捷键 command+shift+. 显示点开头的隐藏文件)

注意⚠️:这个解决办法是删除pod的配置和设置,我没有找到好的办法所以重新删除了,再重新安装一下pod。
首先进入 ~/.gitconfig 这个文件夹,我直接把这个文件夹里面的设置都删除。,,,参考了这篇

<>如何快速安装Cocoapods
Cocoapods来回下载好多次,下载超级慢,试了好多次都是下载失败,后来看到这篇里面就自己补充写下来了。
先删除干净pod残余

sudo gem uninstall cocoapods

再删除安装过的cocopods相关东西,执行

gem list --local | grep cocoapods
显示如下:
cocoapods (1.0.1)
cocoapods-core (1.0.1)
cocoapods-deintegrate (1.0.1)
cocoapods-downloader (1.1.1)
cocoapods-plugins (1.0.0)
cocoapods-search (1.0.0)
cocoapods-stats (1.0.0)
cocoapods-trunk (1.0.0)
cocoapods-try (1.1.0)

如果出现上述列 使用命令逐个删除,
使用终端输入 sudo gem uninstall 加上 👆列表显示的内容

例如:
sudo gem uninstall cocoapods
sudo gem uninstall cocoapods-core
sudo gem uninstall cocoapods-deintegrate
......等等

然后继续执行一下

sudo rm -rf ~/.cocoa-pod

再执行:

pod repo remove master

//然后执行替换成下面这个索引库的镜像

pod repo add master https://gitcafe.com/akuandev/Specs.git

此时打开 ~/.cocoapods/repos 这个文件之后,看看里面有 master 文件夹没有,没有就手动创建一个。

继续执行

git clone https://git.coding.net/CocoaPods/Specs.git ~/.cocoapods/repos/master

稍等几十秒,就可以看到下载进度了。(之前下载了三次都失败,而且还超级🐢慢,看这个进度比之前的快多了,瞬间心里得到点小安慰😁)

当进度走完之后,继续执行安装

gem install cocoapods

如果使用 oschina 上的镜像
执行 "pod repo add master http://git.oschina.net/akuandev/Specs.git"
替换索引库镜像的 https://gitcafe.com/akuandev/Specs.git 替换成 http://git.oschina.net/akuandev/Specs.git 即可。

pod search AFNetworking

如果搜索到了就安装成功了,

如果搜索报👇下面的错
[!] Unable to find a pod with name, author, summary, or description matching AFNetworking

解决办法
删除cocoapods的索引,执行:

rm ~/Library/Caches/CocoaPods/search_index.json

然后重新search一下,就可以了.

09/06/2018 15:19 下午 posted in  Cocoapods

区块链中,交易被如何打包进区块

R:https://www.tangshuang.net/4097.html

大部分材料都详细分析了挖矿过程,介绍了区块是如何产生的。然而,区块的产生并不是区块链的最终目的,保存交易信息才是区块链的最终目的。所以,更重要的一点是要理解,交易信息是如何被打包进区块链的。

##输入和输出

一个交易在系统里被输入和输出表示。输入是指这笔交易所要进行转移的币来自之前的哪些输出。输出是指这些币将会被发送给哪些地址。在区块链上记账,不是告诉你一个账号现在有多少钱,而是告诉你这个账号当前得到了哪些输出。比如一个地址xsw0923sdfew2389dsfw它的相关记录里面,有A、B、C三个输出的目标地址是它,那么它实际上的余额就是这三个输出的金额的总和。

但是现在这个地址的用户要转账了,转账过程不是直接从总和数字中取出一部分进行转移,而是分别从A、B、C三个输出中取出部分或全部,加起来为想要转移的总和的币,进行转移。这个“取出”过程中,A、B、C就变成了输入,转账目标记录才是这次交易的输出。

这样的设计,保证了区块链中的钱从哪里来,到哪里去,一清二楚,绝不含糊。跟会计做账一样,花一笔钱,不单单要记录它花到哪里去了,还要记录这笔钱是从哪里来的,整个资金链是可追溯的,这也保证了交易不可伪造,资金既不会凭空消失,也不会无中生有。

##hash

将交易加入到区块里面需要涉及三个hash,一个是交易本身的hash,另一个是当前这个区块所有交易的merkle hash root,还有一个就是区块hash。

上面已经说过输入与输出了,一个交易可能包含多个输入输出,通过将这些输入输出信息进行排列并进行hash运算,就得到一个交易的唯一hash值。

一个区块里面包含了多个交易,包括挖矿奖励交易,这些交易都被通过一个merkle运算,得到一个hash root所包含,对于merkle可以阅读《区块链如何运用merkle tree验证交易真实性》了解。

区块都hash运算里面,merkle hash root作为一个参数,因此,所有交易的信息都体现在了一个区块的hash里面。

Q:
挖矿成功产生的hash值代表的区块的所有信息,应该包含了交易信息。为了保证区块未被篡改。在区块接收到上一个区块广播出的hash验证合理后,开始计算下一块hash,根据情况加入收到的交易信息。直到完成POW证明。代表区块已经产生(挖矿成功)

##挖矿

挖矿过程就是计算上述区块hash的过程,几乎所有的机器都可以挖矿成功。关键在于谁先挖到矿,因为当一台机器挖矿成功就向网络广播,其他挖矿在对这个hash进行校验之后,就停止自己的挖矿,开始基于这个区块挖新的矿。而每一个被挖到区块中记录的第一笔交易是给挖到这个区块的矿工自己的奖励金,所以抢到第一个挖矿成功名额对于矿工来说至关重要。

前面说过,计算区块hash过程里面,会以区块包含的交易的merkle hash root作为计算的一个参数,因此,挖矿时,矿工会事先从自己本地的交易信息里面提炼出merkle hash root,也就是说,在挖矿之前,对于当前这个矿工来说,新区块会包含哪些交易就已经确定好了的。关于这个过程,可以阅读《Merkle Tree》。

##打包交易记录

挖矿成功之后,矿工需要将完整的区块向网络广播,这个时候,这个区块里面就打包了所有上述对应的交易。

现在有三个问题:

在打包开始之前,这些交易记录是以什么方式存在于网络?
打包是否会把所有交易记录打包进区块?怎么可能保证所有交易都不被遗漏?
如何防止矿工伪造交易?将伪造的交易打包进区块?
##手续费

这里需要知道另外一个概念,即“手续费”。手续费是发起交易的节点决定给的,和小费性质一样。比如A打算转给B0.5个BTC,A手上有一个完整的(来自一个输入)BTC,这时A将这1BTC作为输入,输出包含两条,一条是给B0.5BTC,另一条是给自己0.49BTC(这个过程叫“找零”)。那么这个交易中就有0.01BTC是消失了,消失了的BTC将作为小费奖赏给矿工。

现在我们把自己的角色转换为矿工,当我们从自己的内存中收集所有交易,准备打包区块时,发现这里有一条交易有0.01BTC的小费,于是我把它作为本次打包优先考虑的交易记录。由于每个区块的大小限制在1M左右,所有我只选了那些给小费的交易打包进这次区块。而那些未给交易费的交易,在优先考虑完这些有交易费的交易之后,我才会考虑把它们加进来。

这也就是为什么有些交易被确认很快,有些交易被确认很慢。

##确认

“确认”这个概念也要解释一下,一个区块产生之后,它不是立即可信的,网络上的节点总是相信最长的区块链,当一条交易记录被打包进一个区块之后,就有了一个确认,而这个区块所在的链后面被再加入一个区块,就是第二个确认,如此下去,一个交易有了6个确认,我们就认为这个交易已经确定了,会被永远记录在区块链中。为什么是6个确认呢?因为每一个确认就是一个挖矿过程,都需要提供非常严格的计算,因此,这6个区块被同一个矿工创建的可能性微乎其微(可以说是不可能),因此矿工伪造交易也基本不可能。

由于比特币的区块平均产生时间是10分钟,所以一个交易要1小时左右才能保证成功(最快),不过也不是所有的系统都这样认为,有些网站在接受比特币支付时,认为4个确认就可以给客户发货了。如果不幸这个交易在创建的时候,没有被打包进最近的那个区块,那就要延迟10分钟,如此下去,如果后面过了好几个区块,交易都没有被打包进区块链,那就悲剧了。

##广播交易

不过也不用着急,比特币系统中只留给了这种优先级高的交易50k的存储空间,即使你没有给交易费,也可能在24小时内被打包进区块。不过也不一定,有些交易可能永远都进不了区块,因为矿工是从自己都内存中获取自己暂存的交易信息,一旦这些内存被释放,那么这些交易信息就会被清空。为了解决这个问题,比特币钱包需要不断对自己发起的交易进行检查,如果发现没有被打包进最新的区块,就要对网络广播,这样,这个交易就会在网络里不断被提起,矿工又可以把这笔交易写进自己的内存里暂时放着,等到下次打包区块时,选择是否把它打包进去。

Q:
是否将某个交易打包进挖的那个区块确实是矿工自己决定的,所以才会有51%攻击,当你手上控制了超过51%的算力,你就决定了整个网络哪些交易可以被加入到区块链,哪些可能永远都不会。
这和“只保留50K”并不矛盾,那50K是给有手续费的交易的,即使你机器里面还有其他包含了手续费的交易,你也加不到这个块里面来,剩下的大部分空间都是留给你机器上其他交易记录的。因为一次打包不一定可以把当前网络未进链的交易都装进来,所以还有一些交易被留在了网络中,当新块产生之后,这些交易都发起者会去检查,如果自己都交易没有进块,客户端会再次广播自己的交易。一般情况下,产生时间越早的交易会被优先打包,(虽然有些矿工可能把某个节点列入了黑名单,但其他矿工也有可能抢到记账权),24小时足以给这些交易进链的时间。要是正常网速情况下,过了24小时没进链,就说明整个网络可能面临风险,因为现在好像还无法取消一笔发出的交易。

##小结

本文讲解了对于一个交易而言,“创建(输入输出)-广播-挖矿-打包-确认”的整个过程,读完你应该可以理解交易是怎么被打包进区块的了。

09/04/2018 15:16 下午 posted in  Bitcoin

Xcode 插件主题-Dracula

Dracula for Xcode

A dark theme for Xcode.

Screenshot

Install

All instructions can be found at draculatheme.com/xcode.

Team

This theme is maintained by the following person(s) and a bunch of awesome contributors.

Harrison Heck
Harrison Heck

License

MIT License

08/31/2018 08:39 上午 posted in  Xcode

秘钥盒子

存储数字钱包的秘钥 通过蓝牙进行秘钥加密和传输

08/30/2018 16:33 下午 posted in  Bitcoin

BTC 比特币资料集

BTC 区块链浏览器

blockchain
https://testnet.blockchain.info
https://blockchain.info
https://www.blockchain.com/explorer
助记词转换器

Mnemonic Code Converter
https://iancoleman.io
https://iancoleman.io/bip39/
BTC 矿工费

https://bitcoinfees.earn.com/#fees
BTC 测试币领取

戳这里领取 BTC 测试币
请使用测试网的 BTC 地址(Bitcoin Testnet Address)!!!

BTC 钱包客户端

https://bitcoin.org/en/choose-your-wallet
http://webhdwallet.github.io
BTC 钱包开源项目

Bitcoin Github 搜索结果
开源库:

bitcoinj:
A library for working with Bitcoin
https://bitcoinj.github.io/
https://github.com/bitcoinj/bitcoinj

CoreBitcoin:
Awesome Bitcoin toolkit for ObjC and Swift
https://github.com/oleganza/CoreBitcoin

Bitcoin:
Bitcoin Core integration/staging tree
https://github.com/bitcoin

bitheri:
http://bither.net
https://github.com/bither/bitheri

BitcoinKit
Bitcoin protocol toolkit for Swift
https://github.com/kishikawakatsumi/BitcoinKit
https://github.com/Jax1993/BitcoinKit

Bitcoin Developer Reference:
https://bitcoin.org/en/developer-reference
https://bitcoin.org/en/developer-guide
https://bitcoin.org/zh_CN/
https://bitcoin.org/zh_CN/development#more

BitcoinDeveloperGuide_zhcn:比特币开发者指南(中文版)
https://github.com/vacing/BitcoinDeveloperGuide_zhcn
https://www.yiyibooks.cn/Gamma/bitcoin/developer-guide.html

Bitcoin Projects:
http://www.bitcoinprojects.net
https://bitcoin.org/en/wallets/mobile/ios/
BitcoinSwift:
A native framework for working with Bitcoin on iOS and OSX
https://github.com/DoubleSha/BitcoinSwift
https://github.com/blocktree/BitcoinSwift
iOS BTC Wallet:

breadwallet-ios:
bread - bitcoin wallet
http://breadapp.com
https://github.com/voisine/breadwallet-ios
BitStore-iOS:
Native iOS Bitcoin wallet
http://bitstoreapp.com
https://github.com/BitStore/BitStore-iOS

iOS_Blockchain-Merchant:
Blockchain, merchant, QR code, Bitcoin wallet, BTC, Payment integration
https://github.com/chuch0805/iOS_Blockchain-Merchant

chance_btc_wallet:
Chance Bitcoin Wallet — swift opensource bitcoin wallet
https://github.com/zhiquan911/chance_btc_wallet

Airbitz
Airbitz iOS GUI
https://github.com/Airbitz/airbitz-ios-gui-private

WalletCordova
GreenAddress' open source Android (Cordova) client https://greenaddress.it/
https://github.com/greenaddress/WalletCordova

CoinSpace
Coin.Space Digital currency wallet https://www.coin.space
https://github.com/CoinSpace/CoinSpace

Bither
Bither - a simple and secure Bitcoin wallet! http://bither.net
https://github.com/bither/bither-ios

arcbit-ios
arcbit - iOS bitcoin wallet http://arcbit.io
https://github.com/arcbit/arcbit-ios

mycelium-wallet-ios
Mycelium Bitcoin Wallet for iOS. http://mycelium.com
https://github.com/mycelium-com/wallet-ios

Android BTC Wallet:

samourai-wallet-android
Samourai Bitcoin Wallet for Android. https://samouraiwallet.com
https://github.com/Samourai-Wallet/samourai-wallet-android

mycelium-wallet-android
Mycelium Bitcoin Wallet for Android http://mycelium.com
https://github.com/mycelium-com/wallet-ios

BTC API 文档:

BTC.com:
https://btc.com/api-doc
BIP:

比特币改进方案 Bitcoin Improvement Proposals
https://github.com/bitcoin/bips

比特币改进协议BIP32(翻译)
https://blog.csdn.net/pony_maggie/article/details/76178228

区块链钱包之BIP32, BIP39, BIP44
https://blog.csdn.net/qq634416025/article/details/79686015

BTC 电子书:

《精通比特币》:
http://zhibimo.com/read/wang-miao/mastering-bitcoin/index.html

《中本聪(Satoshi Nakamoto)比特币白皮书英文版》
https://github.com/GammaGao/bitcoinwhitepaper/blob/master/bitcoin_en.pdf

《中本聪(Satoshi Nakamoto)比特币白皮书中文版》
https://github.com/GammaGao/bitcoinwhitepaper/blob/master/bitcoin_cn.pdf

《比特币开发者指南英文版》
https://bitcoin.org/en/developer-guide

《比特币开发者指南中文版》
https://www.yiyibooks.cn/Gamma/bitcoin/developer-guide.html
https://github.com/vacing/BitcoinDeveloperGuide_zhcn
https://legacy.gitbook.com/book/vacing/bitcoindeveloperguide_zhcn/details

《The Internet of Money》(第1卷)中文版
https://github.com/BtcGroupCn/TheInternetOfMoney_1

BTC 文章:

比太钱包的博客
http://blog.sina.com.cn/bither

nuptuser的专栏
https://blog.csdn.net/gammag/article/category/6954035

老杨QQ122209017的博客
https://blog.csdn.net/sinat_34070003/article/category/7582246

浅析比特币的找零机制
https://blog.csdn.net/wo541075754/article/details/53560061

比特币 区块链 几种交易标准详解 P2PKH、P2PK、MS、P2SH加密方式
https://blog.csdn.net/jerry81333/article/details/56824166

BIP16 P2SH交易脚本
https://blog.csdn.net/sinat_34070003/article/details/79871044

比特币系统的脚本(Script)——交易生成和验证的原理(第一部分)(初稿)
https://blog.csdn.net/taifei/article/details/73321293

多签名交易和P2SH
http://blog.sina.com.cn/s/blog_130223eeb0101ipwi.html

理解比特币脚本
https://zhuanlan.zhihu.com/p/25461051

比特币脚本及交易分析 - 智能合约雏形
https://blockflow.net/t/topic/196

Linuxest
https://blog.csdn.net/ddk3001/article/category/7736876

一文看懂怎样用 Python 创建比特币交易
https://blog.csdn.net/Blockchain_lemon/article/details/79798913

隔离见证
https://blog.csdn.net/taifei/article/details/73479998
https://www.jianshu.com/p/2a5e038074a0
https://baike.baidu.com/item/隔离见证/22448459?fr=aladdin
https://blog.csdn.net/sinat_34070003/article/details/79893114

作者:AlleniCoder
链接:https://www.jianshu.com/p/5521eecb0ad0
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

08/28/2018 13:21 下午 posted in  Bitcoin

Testnet测试网络配置

08/28/2018 13:20 下午 posted in  Bitcoin

EOS 超级节点的五个使命

在EOS系统中,有“两股势力”是整个系统最关键的因素,那就是项目方和见证人。很多人觉得EOS这个项目“奇葩”,就奇葩在项目方和见证人的关系上。EOS的项目方是BlockOne公司,创始人是BlockOne公司的首席技术官(CTO)Daniel Larimer,坊间称BM(ByteMaster)。BlockOne公司曾经多次声明,其公司只开发EOS软件,并免费提供给任何想使用软件的人,公司不负责任何EOS网络启动。更令投资者难以接受的是,BlockOne公司公开宣称,其公司众筹的EOS代币未来可能不具有任何价值和效用,公司不为EOS代币的价值负责,令很多人觉得BlockOne公司不“靠谱”。

其实BlockOne公司这样的声明是有意为之的,众所周知美国对众筹的管理非常严格,一旦众筹行为所分发的代币被美国政府定义为公司的股份或证券,就会立即被界定为非法集资。比特币就是因为被界定为了资产,而不是股份,才能在美国合法进行交易。为了让EOS代币被界定为资产,BlockOne公司只好宣布不为EOS代币负责,也不负责启动真正的EOS系统。

BlockOne公司如此的定位,就给EOS系统的见证人更多的责任和使命,EOS系统见证人的角色可以从以下几点来理解:

##1.硬件资源

任何计算机系统都是由软件和硬件两大部分组成的,BlockOne公司提供软件,硬件部分则由见证人提供,双方各司其职,组成了一个完整的计算机系统。

##2.社区建设

对于BlockOne公司来说,管理和建设如此大规模的社区是不现实的,而见证人分布于世界合格国家,了解本地的EOS代币持有者。见证人在当地进行宣传活动,吸引选票的同时,也相当于建立了一个当地的EOS社区。所有的见证人社区组合起来,就建立了世界最大的一个区块链社区。

##3.社区治理

从社区治理来看,见证人相当于议会,每个见证人都是由当地选民选举出来的,非常像西方的代议制民主。见证人中的大多数(三分之二)通过的决策,就代表了大多数选民(EOS代币持有者)的观点。见证人组织就是EOS系统的最高权力。但BlockOne官方也可以制衡见证人,因为BlockOne官方尤其是BM本人在EOS代币持有者中有巨大影响力,可以左右选民的投票。而且BlockOne官方和BM本人也持有大量EOS代币,他们可以直接进行投票来影响见证人选举,双方互相制约。

##4.去中心化

从整个EOS系统的去中心化机制来看,见证人担负着系统去中心化的使命。BlockOne公司是“中心化”的,理论上可以被强力控制。EOS见证人分散在时间各地,运行和维护EOS系统,共同保存系统账本,维护各地的EOS社区。理论上来讲,只要系统还剩下最后一个见证人,EOS系统都不会崩溃,都可以等到其他见证人恢复再重新加入系统。几十个见证人+后备见证人保证了EOS系统的高度去中心化。也保证了系统的冗余度和稳定性。

##5.应用生态

一个去中心化智能合约系统,最核心的就是智能合约(Dapp)本身的开发。没有大量优秀Dapp的智能合约系统,就像是iOS没有了大的第三方应用,整个系统就没有任何价值。BlockOne官方的精力主要集中在在系统的开发,那么Dapp的开发生态的培养,一方面需要BlockOne官方设立基金,激励Dapp开发团队,另一方面就需要见证人了。目前EOS系统的发展也是这样的,很多见证人都发布了自己的DApp开发计划,他们与BlockOne的基金一起培育EOS的开发者生态。

见证人对系统做出贡献的同时,当然也会获得相应的奖励。目前见证人的奖励分为出块奖励和得票奖励,前者根据出块的数量,后者根据选举时的得票数。目前EOS系统每年通货膨胀5%,这里面的五分之一会作为见证人的奖励。按总量10以枚计算,第一年用于见证人奖励的代币为1000万枚。按照15美元单价计算,总金额为1.5亿美元。这样的奖励规模使得见证人有足够的资源去维护自己的硬件开支,并持续壮大EOS社区。

BlockOne公司、EOS见证人、EOS代币持有者这三者互相制衡、互相支撑、互相渗透,在区块链世界里独树一帜。

08/15/2018 17:00 下午 posted in  EOS