BigchainDB genesis block example

open http://127.0.0.1:8080/#dataexplorer on your browser and click tab “Data Explorer"

{
    "block": {
        "node_pubkey":  "8SjBRtHvxKkZeb4L6e7tERsSzhHVD1uP6y2crSm4WRdt" ,
            "timestamp":  "1475829027" ,
            "transactions": [
            {   
                "id":  "00255feada6b34b22e854d9b23c429a75263b32e0bb4ce6be1318448f0d6a442" ,
                "transaction": {
                    "conditions": [
                    {   
                        "cid": 0 , 
                        "condition": {
                            "details": {
                                "bitmask": 32 ,
                                "public_key":  "8SjBRtHvxKkZeb4L6e7tERsSzhHVD1uP6y2crSm4WRdt" ,
                                "signature": null ,
                                "type":  "fulfillment" ,
                                "type_id": 4
                            } , 
                            "uri":  "000"
                        } , 
                        "owners_after": [
                            "8SjBRtHvxKkZeb4L6e7tERsSzhHVD1uP6y2crSm4WRdt"
                            ]   
                    }   
                    ] , 
                        "data": {
                            "payload": {
                                "message":  "Hello World from the BigchainDB"
                            } , 
                            "uuid":  "561cb60a-e112-41a0-9e03-f2313acbdc65"
                        } , 
                        "fulfillments": [
                        {   
                            "fid": 0 , 
                            "fulfillment": "cf:4:bpkFhfzB3r8vcaTJacAE77FhqqemJApf8LECu2HbPLONQw2eHU40BAgO5P6dwHdwHbaPl-KbVy_Rarq2rDx4goYwQDkI61Li7vC7BYNkLpv-q-eUrLk9D3dfDJJFLzwJ" ,
                            "input": null ,
                            "owners_before": [
                                "8SjBRtHvxKkZeb4L6e7tERsSzhHVD1uP6y2crSm4WRdt"
                                ]   
                        }   
                    ] , 
                        "operation":  "GENESIS" ,
                        "timestamp":  "1475829027" ,
                        "version": 1
                }   
            }   
        ] , 
            "voters": [
                "8SjBRtHvxKkZeb4L6e7tERsSzhHVD1uP6y2crSm4WRdt"
                ]   
    } , 
        "id":  "0d22db9fe7d8de0335f3ffeacda04864c1091ffdb66135dc7f01105fd5a8a5b5" ,
        "signature":  "3TzakE12fDVsjbrKXpJ8p4ysE73U2bfsZJVuGYbFyHkp6E8FZev7VpsYnxoHvhiePW9JawiceRmmmAYq4LfUAkXV"
}

bitcoin private/public key generate with python3

https://github.com/petertodd/python-bitcoinlib

I have search for days to find a good python3 lib to generate private/public key and address lib

and this lib seems to be the best one

you can find “create private key, public key, address, sign and verify" at below link

https://github.com/petertodd/python-bitcoinlib/blob/master/examples/sign-message.py

跑了這個範例之後,產生的 private key 應該是 WIF 格式

./sign-message.py
L4vB5fomsK8L95wQ7GFzvErYGht49JsCPJyJMHpB4xGM6xgi2jvG 1F26pNMrywyZJdr22jErtKcjF8R3Ttt55G
Address: 1F26pNMrywyZJdr22jErtKcjF8R3Ttt55G
Message: Hey I just met you, and this is crazy, but I'll verify my address, maybe ...

Signature: b'H4yj969O4ZdVyDoB0wYdgKzb2qjGwg4t4/pf/SuDSowJTBn7eEkP84gmp9KuStQFSNSldylDtP+uIwuEtUVU/TE='

Verified: True

To verify using bitcoin core;
`bitcoin-cli verifymessage 1F26pNMrywyZJdr22jErtKcjF8R3Ttt55G "H4yj969O4ZdVyDoB0wYdgKzb2qjGwg4t4/pf/SuDSowJTBn7eEkP84gmp9KuStQFSNSldylDtP+uIwuEtUVU/TE=" "Hey I just met you, and this is crazy, but I'll verify my address, maybe ..."`

但實際上把 L4vB5fomsK8L95wQ7GFzvErYGht49JsCPJyJMHpB4xGM6xgi2jvG 開頭L拿掉之後再去  bitcoin test 網站產生 private key

產生出來的 private key 長這樣DDE713F429AA5B4624076448BF6A9FDEACAE68F6FB800C50D4D6B393CFACDE01

再把這個 private key 拿去 bitcoin test 網站跑

產生出來的 address 長這樣 1GAehh7TsJAHuUAeKZcXf5CnwuGuGgyX2S

跟上面範例的 address 不吻合…

我應該是哪邊弄錯了,但是還沒找到

2016/10/05更新

產生出來的 private key 長這樣 DDE713F429AA5B4624076448BF6A9FDEACAE68F6FB800C50D4D6B393CFACDE01

最後面有 01,則代表這個 WIF 裡面隱含了 「private key」 以及 「public key 需要是壓縮過的格式」這兩個資訊

如果 private key 最後面沒有 01 ,則代表這個 WIF 裡面隱含了「private key」以及「public key 需要是非壓縮過的格式」

所以要把 01 拿掉之後才是 private key

並且這個 python-bitcoinlib 產生的 WIF 有帶 01 ,這代表 python-bitcoinlib 產生的 address 是用 compressed public key 產生的 address

但是 bitcoin test 這個網站是用 uncompressed public key 去產生 address 的

所以 lib 產生的結果勢必會跟 bitcoin test 不同

#!/usr/bin/env python3
from __future__ import absolute_import, division, print_function, unicode_literals

from bitcoin.wallet import CBitcoinSecret, P2PKHBitcoinAddress
from bitcoin.signmessage import BitcoinMessage, VerifyMessage, SignMessage
import os
import bitcoin

# A base58-encoded secret key as input
key = CBitcoinSecret.from_secret_bytes(os.urandom(32),compressed=False)
print("private key base58 WIF format:\t%s(%d)" % (key, len(str(key)) ))
address = P2PKHBitcoinAddress.from_pubkey(key.pub)
print("Address:\t\t\t%s" % address)
print("public key hex format:\t\t%s" % bitcoin.core.b2x(key.pub))
message = "Hey I just met you, and this is crazy, but I'll verify my address, maybe ..."

message = BitcoinMessage(message)

signature = SignMessage(key, message)

print("Message: %s" % message)
print("\nSignature: %s" % signature)
print("\nVerified: %s" % VerifyMessage(address, message, signature))

print("\nTo verify using bitcoin core;")
print("`bitcoin-cli verifymessage %s \"%s\" \"%s\"`" % (address, signature.decode('ascii'), message))

在產生 WIF format private key 的時候加上 compressed=False 就可以得到非壓縮格式的 public key and address

 

merge mining, 什麼是 merge mining

http://bitcoin.stackexchange.com/a/1288/33824

Basically the idea is that you assemble a Namecoin block and hash it, and then insert that hash into a Bitcoin block. Now when you solve the Bitcoin block at a difficulty level greater to or equal to the Namecoin difficulty level, it will be proof that that amount of work has been done for the Namecoin block. The Namecoin protocol has been altered to accept a Bitcoin block (solved at or above the Namecoin difficulty level) containing a hash of a Namecoin block as proof of work for the Namecoin block. The Bitcoin block will only be acceptable to the Bitcoin network if it is at the difficulty of the Bitcoin network

簡言之就是,把 Namecoin 的 block hash 插入到 blockchain ,當 blockchain 找到了 nonce ,並且難度高於或等於 Namecoin 的難度,則 Namecoin 有設計成當做 Namecoin block 也得到的相同算力保護。其實 merge mining 只有計算 bitcoin block,並沒有計算 Namecoin block

Ethereum 筆記

below info are almost comes from here https://www.ethereum.org/ether

  1. 每 12 秒產生一個新區塊
  2. 產生一個新區塊會得到5 ether 作為獎勵
  3. 2014 年的初始供應量為六千萬 ether
  4. 每年的發行量上限為一千八百萬 ether
  5. 隨著總流通量增多但每年發行量不變,這理論上會是一個通貨膨脹率漸低的貨幣
  6. 理論上,會在未來某個時間點達到每年發行量和每年遺失量平衡
  7. 區塊鍊上的貨幣,包含比特幣 and ether 都會有遺失之後就無法在被使用的問題。這點跟法幣不太一樣,法幣遺失之後…別人撿走還是可以用的
  8. 預計會在 2017 年從目前的 proof of work 轉成 Casper 這個共識算法,理論上更有效率以及更少費用
  9. 有個叫做 DAG(short for “Directed Acyclic Graph") 的東西可以用來防止 ASIC 機器大量生產 block,讓每個人的家用電腦保持有競爭力

 

 

Why does Bitcoin send the “change” to a different address? 為什麼比特幣的找零要存到另一個地址?

今天跟朋友聊到這個問題,上網咕狗很快看到一些討論串

下面這個算是不錯的答案了

http://bitcoin.stackexchange.com/questions/1629/why-does-bitcoin-send-the-change-to-a-different-address

其實這個問題可以拆分的更細

  1. 為什麼幣特幣錢包不發送剛剛好的錢過去就好,偏偏要把地址上的錢全放進交易,再把多餘的部份視為找零存入另一個地址?
  2. 為什麼不把找零存入原本的地址即可?

上面那個網址只有針對第二個問題做解答(http://bitcoin.stackexchange.com/a/1637/33824

  1. 讓追蹤更為困難,因為消費掉之後,原本放錢的地址就空了
  2. 讓匿名更為完整,因為完全無法區分拆分出去的兩筆錢哪個是消費哪個是找零
  3. 目前的電腦確實無法從公開的地址跟密文反推私鑰,但量子電腦有機會辦到,所以如果公鑰加密的密文越多,可以說是讓量子電腦反推私鑰的難易度降低

至於第一個問題,我目前還不知道怎麼咕狗可以找到答案,我咕狗了「why bitcoin won’t send accurate money to another address」但看不到相關的討論。個人認為單純只是因為單純的從設計上不提供修改一個地址上面擁有的比特幣數量。這一個地址目前擁有這麼多錢,要改變這些數量的方法就只能轉移到下一個地址。

台灣證券交易所對 blockchain 的看法

我今天去下面這個活動
證交所董事長有來講兩句
簡言之,他們也認真在看 blockchain 可以搞些什麼
例如有沒有機會作到:
場外交易,讓證券交易不只可以發生在證交所
電子投票,股東會電子投票,不然股東全台都有,要集合很麻煩,也有發生過股東會地點故意選的偏僻,惡意阻止小股東參預,也發生過股東會入場跟夜店放人一樣慢,等某些股東入場時,已經投完票做出某些決定
無實體化,這個我不知道是什麼
https://www.facebook.com/events/1075959569109462/

我有問證交所
blockchain相關技術是證交所會開發,還是外包?
證交所是傾向外包,他舉例,新加坡證交所整套軟硬體設備就是NASDAQ供應的

場外交易的好處是,避免證交所發生天災等意外休市時,股票無法變現
也就是提高變現能力

比特幣:既然不是法幣,那價值怎麼被定義的?

昨天參加了區塊練的技術與應用講座

會後在現場有些問題討論,紀錄於此,造福世人

Q: 比特幣的價值(目前四百多塊美金兌換一枚比特幣)是誰定義的?

A: 比特幣的價值目前是四百多塊美金,是因為各個交易所有人要買比特幣所以掛一個買價,有人要賣比特幣所以掛一個賣價,如果掛買跟掛賣價格相等即成交,那當下的成交價格就是那個當下的比特幣價值。所以比特幣價格跟股票價格一樣,如果人們認為這個公司發展好,未來EPS高,股利發的多,那就會比較願意掛比較高的買價跟別人競爭買該公司股票,以取得未來的高獲利,如果人們認為比特幣未來發展好,可以流通的地方多,需求的人多,那就會比較願意掛比較高的價格跟別人競爭買下比特幣,以取得未來賣掉的價差。

Q: 我怎麼知道目前比特幣的價值是多少?

A: 上各個交易所看,例如https://www.maicoin.com/zh-TW/charts?currency=usd。每個交易所價格不一定相同

以下是經濟問題,跟BTC沒有直接關係

Q: 假設現在全世界鈔票總價值三千萬,並且有兩千萬在你手上,而有個鑽石價格四千萬,你要怎麼買下這個鑽石?

A: 我不太可能把其他人手上的一千萬拿到手,因為那等於讓其他人都不要做買賣了。所以方法會是我要跟銀行借兩千萬,這樣再加上我手上的兩千萬就可以買四千萬的鑽石。但是,銀行哪來的兩千萬借我?所以我可以先把兩千萬存銀行,這時候我戶頭有兩千萬,手上沒現金,然後銀行手上有兩千萬,然後銀行就可以借我兩千萬了(先不考慮存款準備率)。銀行借我兩千萬之後,我戶頭兩千萬加上手上借來的兩千萬,我總共有四千萬,剛好可以買下鑽石。

Q: 承上題,買下鑽石之後,不巧地殼發生變動,把一堆碳壓成了鑽石,鑽石含量變成跟鐵礦一樣多,原本四千萬的鑽石現在剩下四千塊,請問會發生什麼事?

A: 原本我要賺錢還兩千萬貸款的,但是現在這個鳥鑽石只剩下四千塊的價值,一夕之間我身家全無,任何有點常識的人應該都會直接申請破產,不還貸款了。對於買鑽石的人事情到這邊大概就結束了。但是對銀行來說可是多了高達兩千萬的呆帳,而且其他人手上的錢加起來也才一千萬,現在對於銀行裡面的錢來說,整體是負一千萬,等於這個世界的錢因為一顆鑽石的價格浮動而通通消失了。一個國家如果發生這種事情,大家搶物資殺來殺去的,一片亂七八遭,肯定會亡國的吧。這個例子裡面的銀行就是所謂的『大到不能倒』,錢通通消失就是所謂的『流動性風險』。

Q: 比特幣可以解決上面那種問題嗎?

A: 目前還不行,至少我想不出來,而且也沒看到有人提出解法。而且上面那種問題是『物質被人類定義價值』的問題,跟比特幣可以說是沒有關係。