ここ数年漠然と、「仮想通貨」という言葉から連想して、これって独自で作れるんじゃないかな。
その独自通貨ができれば金融の枠組み自体を独自で形成できるからなんか
すごくね。
という漠然と連想して、さらに数回連想の階段を上っただけで、天井にぶつかって、
思考停止になっていた
ここ数年。
ん。まてまて、仮想通貨だから独自で作れるよね。
もう一度自分に質問してみたら、内から久々、込み上げる好奇心。
そこから、みなさんと同じアクション。決まっているよね。
そう、グーグルで「仮想通貨の作り方」と検索。
国民全員同じ足並みがそろったアクション。ここが基本になる時代がくるとはすごい。
ここから枝分かれ。好奇心がある人は進む。
さあでてきた。検索結果一覧。どこから見よかな。開く前にもうプレビューでわかってしまう。グーグルの洗練ぶり。
上は、広告でややぶれているから少し下あたりかな。このアクションも
もうまもなく、世界全員足並みそろいます。
仮想通貨の作り方でてきました。
私の場合、おそらく数年エンジニアのくせに作ることに興味を持たなかったので
相当出遅れ感がもう検索結果を見ると分かります。
つまり、独自の仮想通貨を作成するためのプラットフォームがサービスが
既に出来上がっているということ
エンジニアでなくても、だれでも作れるの時代なのです。
創造物が生まれて、価値を見出してから発展する途中にできあがる、
「自分で作るためのツール。」
ただ、ここからが胆。実は誰でも作れるツールには、創造者へのリターンが
神でない限り含まれます。
カウンターパーティー(XCP)
などのプラットフォームが既にあるようです。
そして
オープンソースも存在する。
私は少し前者を見てから、後者を見ていきたいと思っています。
これが原型かな
https://github.com/bitcoin/bitcoin
githubでbitcoinの原型が公開されていた。。
今更ですがbitcoinもオープンソースですね。
ソースの中を少し拝見しました。
// Copyright (c) 2009-2010 Satoshi Nakamoto
// Copyright (c) 2009-2018 The Bitcoin Core developers
// Distributed under the MIT software license, see the accompanying
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
どうやらC++で2009年から作り始めているようです。
サトシナカモトさんという方ですね。これは名前からして日本人のようです。
MITライセンスなので、そうこのブログでも以前解説しましたが、
再利用OKなソース。ナカモトさんは、神でした。リターンを求めない。
少しソースコードを眺めています。
おそらく中核のCoins.hがいいかな。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 |
// Copyright (c) 2009-2010 Satoshi Nakamoto // Copyright (c) 2009-2018 The Bitcoin Core developers // Distributed under the MIT software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. #ifndef BITCOIN_COINS_H #define BITCOIN_COINS_H #include <primitives/transaction.h> #include <compressor.h> #include <core_memusage.h> #include <crypto/siphash.h> #include <memusage.h> #include <serialize.h> #include <uint256.h> #include <assert.h> #include <stdint.h> #include <unordered_map> /** * A UTXO entry. * * Serialized format: * - VARINT((coinbase ? 1 : 0) | (height << 1)) * - the non-spent CTxOut (via CTxOutCompressor) */ class Coin { public: //! unspent transaction output CTxOut out; //! whether containing transaction was a coinbase unsigned int fCoinBase : 1; //! at which height this containing transaction was included in the active block chain uint32_t nHeight : 31; //! construct a Coin from a CTxOut and height/coinbase information. Coin(CTxOut&& outIn, int nHeightIn, bool fCoinBaseIn) : out(std::move(outIn)), fCoinBase(fCoinBaseIn), nHeight(nHeightIn) {} Coin(const CTxOut& outIn, int nHeightIn, bool fCoinBaseIn) : out(outIn), fCoinBase(fCoinBaseIn),nHeight(nHeightIn) {} void Clear() { out.SetNull(); fCoinBase = false; nHeight = 0; } //! empty constructor Coin() : fCoinBase(false), nHeight(0) { } bool IsCoinBase() const { return fCoinBase; } template<typename Stream> void Serialize(Stream &s) const { assert(!IsSpent()); uint32_t code = nHeight * 2 + fCoinBase; ::Serialize(s, VARINT(code)); ::Serialize(s, CTxOutCompressor(REF(out))); } template<typename Stream> void Unserialize(Stream &s) { uint32_t code = 0; ::Unserialize(s, VARINT(code)); nHeight = code >> 1; fCoinBase = code & 1; ::Unserialize(s, CTxOutCompressor(out)); } bool IsSpent() const { return out.IsNull(); } size_t DynamicMemoryUsage() const { return memusage::DynamicUsage(out.scriptPubKey); } }; class SaltedOutpointHasher { private: /** Salt */ const uint64_t k0, k1; public: SaltedOutpointHasher(); /** * This *must* return size_t. With Boost 1.46 on 32-bit systems the * unordered_map will behave unpredictably if the custom hasher returns a * uint64_t, resulting in failures when syncing the chain (#4634). */ size_t operator()(const COutPoint& id) const { return SipHashUint256Extra(k0, k1, id.hash, id.n); } }; |
上部に出てきた「uxto」とはなんでしょうか。
おそらく、仮想通貨に触れている人にとってはおなじみなんでしょうね。
ソースのところどころに出てきます。
今ググったところ、「未使用のコイン」とのことです。そうかこれがブロックチェーンの中核となっている概念なんですね。
「unspent transaction output」の略で「未使用のトランザクションアウトプット」
つまり、まだ誰も使っていないビットコイン。未使用でブロックチェーンに書き込まれていないビットコインのこと。
ソースコード内に入っていたreadmeも記載しておきます。
以下に書いてあることが、開発者の核となるエッセンスです。ここからおさえていきましょうか。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 |
Bitcoin Core integration/staging tree ===================================== [![Build Status](https://travis-ci.org/bitcoin/bitcoin.svg?branch=master)](https://travis-ci.org/bitcoin/bitcoin) https://bitcoincore.org What is Bitcoin? ---------------- Bitcoin is an experimental digital currency that enables instant payments to anyone, anywhere in the world. Bitcoin uses peer-to-peer technology to operate with no central authority: managing transactions and issuing money are carried out collectively by the network. Bitcoin Core is the name of open source software which enables the use of this currency. For more information, as well as an immediately useable, binary version of the Bitcoin Core software, see https://bitcoincore.org/en/download/, or read the [original whitepaper](https://bitcoincore.org/bitcoin.pdf). License ------- Bitcoin Core is released under the terms of the MIT license. See [COPYING](COPYING) for more information or see https://opensource.org/licenses/MIT. Development Process ------------------- The `master` branch is regularly built and tested, but is not guaranteed to be completely stable. [Tags](https://github.com/bitcoin/bitcoin/tags) are created regularly to indicate new official, stable release versions of Bitcoin Core. The contribution workflow is described in [CONTRIBUTING.md](CONTRIBUTING.md) and useful hints for developers can be found in [doc/developer-notes.md](doc/developer-notes.md). Testing ------- Testing and code review is the bottleneck for development; we get more pull requests than we can review and test on short notice. Please be patient and help out by testing other people's pull requests, and remember this is a security-critical project where any mistake might cost people lots of money. ### Automated Testing Developers are strongly encouraged to write [unit tests](src/test/README.md) for new code, and to submit new unit tests for old code. Unit tests can be compiled and run (assuming they weren't disabled in configure) with: `make check`. Further details on running and extending unit tests can be found in [/src/test/README.md](/src/test/README.md). There are also [regression and integration tests](/test), written in Python, that are run automatically on the build server. These tests can be run (if the [test dependencies](/test) are installed) with: `test/functional/test_runner.py` The Travis CI system makes sure that every pull request is built for Windows, Linux, and macOS, and that unit/sanity tests are run automatically. ### Manual Quality Assurance (QA) Testing Changes should be tested by somebody other than the developer who wrote the code. This is especially important for large or high-risk changes. It is useful to add a test plan to the pull request description if testing the changes is not straightforward. Translations ------------ Changes to translations as well as new translations can be submitted to [Bitcoin Core's Transifex page](https://www.transifex.com/projects/p/bitcoin/). Translations are periodically pulled from Transifex and merged into the git repository. See the [translation process](doc/translation_process.md) for details on how this works. **Important**: We do not accept translation changes as GitHub pull requests because the next pull from Transifex would automatically overwrite them again. Translators should also subscribe to the [mailing list](https://groups.google.com/forum/#!forum/bitcoin-translators). |
What is Bitcoin?
—————-
Bitcoin is an experimental digital currency that enables instant payments to
anyone, anywhere in the world. Bitcoin uses peer-to-peer technology to operate
with no central authority: managing transactions and issuing money are carried
out collectively by the network. Bitcoin Core is the name of open source
software which enables the use of this currency.
訳:間違っていたらつっこんで下さい。
ビットコインとは
ビットコインは、デジタル通貨として、世界中のだれとでも通貨の交換ができる仕組みです。また1対1の人やりとりができ、中央集権のサーバーを必要としない通信ができる。
ビットコインはオープンソースのソフトウェアとして使用されていることで知られています。
・・・・・
とりあえずここまで。。
うわー止まんない。また、研究課題がでてきてしまった~。
「多摩かるた」を作りながら、多摩から発信される通貨「itm」を作る予定。これも日曜ですね。やること多すぎ。
メルマガ登録をお願いします。
素敵な?情報がいつもあなたに届くようになります。(itmnewsの記事が届きます。)お役に立つかどうかわかりませんが頑張りますっ。登録してみてください。