Approximate to the Peirce quincuncial projection

投影法を開発してみたシリーズその1(今回はただの近似です)

August's Conformal Projection of the Sphere on a Two-Cusped Epicycloidから

複素関数同士を足しても複素関数になるのと同じことで正角図法同士の座標値を足して正角図法を作ることができるわけなのですが、足した結果南極に面積が潰れる特異点が発生した?なるほど、1階微分がちょうど打ち消し合ってJacobianが0になるのですね。

じゃあ足す(相加平均)ではなく相乗平均ならば?原理的に打ち消しが起こらないはず。*1

f:id:dummy_index:20200817234942p:plain
(Arithmetic / geometric) mean between normal and transverse Lagrange projection

…四角い…これもう少し頑張ればPeirce quincuncialになるのでは?→色々やって3自由度でfittingした結果

f:id:dummy_index:20200817235428p:plain
Approximate quincuncial projection

誤差1km以下になったみたいなのでこれ以上の深入りはしません。 fittingのときに正解のPeirce quincuncial projectionの一辺の長さ(1.311...)だけは利用しましたが、利用せず「一辺が一直線になるように」という条件だけで行けそうな気がします。

github.com

2020.08.17 初版/小修正
2020.08.19 小修正 2020.08.22 リンク追加

*1:いや、条件が変わるだけで原理的には普通に起こります。

gnuplotで地図投影法

また色々ほったらかして地図投影法の式をいじりまわしたりしていました。

(本格的には2016年あたりからなのですが、2013年に下書き途中のまま放置した記事なども)

gnuplot複素数型に緯度と経度を詰め込んで簡単に処理の入れ子が書けるようにしています。(x=f_x(\lambda, \phi), y=f_y(\lambda, \phi)みたいに関数が増殖するのを避けたかった)

GitHub - dummy-index/gp-mapprojections: Map projections with Gnuplot

仮想通貨口だけ 追記あり

  • 新しいハッシュ関数を思いついている(なんか色々な関数を組み合わせる風潮に文句があるらしい)
  • PoW/PoW/PoSとか考えてみたけどすでに5xPoWなMyriadcoinがあるのでパッとしない
  • ソース公開と同時にLaunchで祭りとか恐怖なので色々仕掛けを考えている
  • Ringoの不具合の方は追いかけてなかったからなあ
  • Darkcoinとは違った匿名化のやり方があるんじゃないか→例えばこんな要件は→実現方法も思いついた(少々問題あり)
  • やりたいことだけからすると今回はPoSは回避してしまいたいが、マイナーコインのDiff死への対策には有効だからなあ
  • Diff死への対策なら2xPoWでもいいか

 追記(2014/7/10)

匿名化の件はECDHの応用だけど自信がないので調べまわっていたら、英語版WikipediaDHになんかそれっぽい記述発見。変更履歴…

CryptoNoteUnlinkable transactionsですかー、2012年ですかー、ですよねー

はい降参です。ただ大部分の人がアドレスの長さ2倍っていうのは運用上ちょっと重い気が。A=Bでもセキュリティレベル低下しないと考えていいのかしら。

Darkcoinなんぞに群がってる場合じゃないですよみなさん。え?いやどこにもこれが実装されてるなんて書いてないし…

仮想通貨ソース読み(0.2)~PoSとPoWとKGWの状況調査 修正

問題意識は前回参照

[POLL] '42 Coin' Client Update [PoS, KGW, Merged Mining?] Problem = Multi-Pools

Does it exist any coin with PoS + KGW?

I think there is no coin with the same features implemented together... So it would be a great innovation

とは言われているものの

Novacoin / ノヴァコイン - アルトコイン | Bitcoin日本語情報サイト

システム Proof of Work Proof of Stake

Difficulty調整 1ブロック毎

KGWでなければすでに実現はされている模様。

タイムリーにKumacoinというのができてるけどKGWにしたとかやめたとか、ソース公開マダー?公開されたので追記

追記(2014/5/6)ごめんなさい、Peercoin系のBest chain判定を見間違えてました。修正。

続きを読む

仮想通貨ソース読み(0.1)

ビットコイン - Wikipedia

「長い」というのは単純にブロック数が多いという意味ではなく、そのチェーンを構成するのにかかった計算量が大きいという意味である。 

【話題】Auroracoinが以前指摘されていたKGWの脆弱性を突かれてクラッシュ?

 いわゆる本来のブロックチェーンを短時間で追い抜いて上書きをし攻撃を仕掛けることが可能だ、という風に今回の攻撃の理論を考えています。

 ん?

【解説】KGWにおいて51%を超えることが問題となりにくい理由

 つまり攻撃者は、1blockごとにどんどんハッシュレートをあげていき発見間隔の短い状態を保ち続けるか、

んー。

 

KGW(?とりあえず1ブロックごとにDifficultyが調整されるもの)においてもし枝の長さだけが問題なら攻撃者は自分の動かすプログラムをいじって 「リアルの1秒」を「プログラムにとっての90秒」に偽装してやればあっという間に本来の枝を追い抜けますよ。

49%の合議体が51%の「完全に攻撃者の支配下にある」計算力に敵うはずがなくて、何か対策を思いついたらそれは結局別のところに穴を作ってしまっているのがオチ。(PoSは所持コインに比例した計算しか許されないプロトコルであり問題をすり替えることに成功以下略)(SHA-256は倒産したASIC業者とかから大量のASICがテロリストに流れて51%攻撃が発生したりするかもしれないので胸熱)

 

リンク先の 対策パッチを見ると…変なBlockTimeを食わせることでPastRateAdjustmentRatioを更新させなくすることが可能だった?本文にパッチ内容の説明はなさげ…

 

追記

リアル時間で先回りするだけじゃなくてタイムスタンプの時刻でも先回りしなければならないわけなので単純な話ではないのはわかってるねんで

でPeercoinだと…Reorganize()…nHeightってこれ単純に長さっぽいぞ…(coin-ageとdifficultyをどう「チェーンの計算量」スケールにまとめるのか知りたかったのにこんなオチか)

最新のBitcoinだと…だいぶ構造が違うなあ…chainMostWork…CBlockIndexWorkComparator…GetBlockWork…ブロックのヘッダに書いてあるのか…でそのnBitsの内容はそこまでのチェーンのnBitsとnTimeから一意に決まる気がするので勝手な値は入れられないはずだがそのチェックは…どこ?

仮想通貨ソース読み(0)

Peercoinのソースを落としてみたけどmainすらどこにあるのやら(T_T

なので

Bitcoinウォレットを実装する - ビットコインの仕組み:Bitcoinを技術的に徹底解説!

で全体像をつかむところから。

 

・SHA-256?RIPEMD-160?→はどちらもハッシュの話。暗号というか署名はECDSA。でその公開鍵が512bitで秘密鍵が256bit

・アドレスを生成するのはつまり暗号鍵と公開鍵のペアを生成するってことらしい。てーことはつまり、匿名性を目的として取引ごとにアドレスを生成する→別々の公開鍵で受け取る→別々の人が受け取ったようなもの→それらのコインを送るのには別々の秘密鍵が必要(公開鍵と違った秘密鍵での署名で送金できたらなんだそりゃ)→まとまった金額として送るには一旦どれかのアドレスにまとめるとか?→受け取り側が「バラバラでも気にしない」なら別にいいか

哲史白書では送り先の公開鍵が入っているところ、実際にはアドレスが入っている。アドレスに対応する公開鍵は次のTxの中に署名と一緒に入っている。

 

ところで何を掘っているかですが、家にPCI-Express x16の刺さる場所がなくてGPU掘りするには初期投資がでかい&面倒、ということでお手軽にANTMINER U2を2個ゲット。Peercoinを掘りつつメインのノートのCPUとGPUでDogeやFlappyやBottlecapsやSpainやSakuraやSayaを掘ってます。

 

仮想通貨掘り

Mt.Goxのニュースを見てから始めたにわかです。

 

・原理的にマイニングにはwalletが必要(ブロックに入る取引記録を検証するのはpeer=walletの責任)。プールマイニングだとminerを立ち上げるだけだけれど、プールのサーバにwalletがあるイメージ。

・大規模にネットワークが分断されたらblockchainが分岐して後でどちらかがキャンセルされる事態に。不整合(二重使用)がないかチェックして統合することは原理的に可能な気がするけど。

・というかあるノードが発した取引データが過半数のノードに届かなかったらその取引はなかったことになるのか?

・攻撃に成功してblockchainが差し替えられてしまうと、例えばコーヒーの代金として受け取ったつもりのコインがいつの間にか別の人のものになってしまう。コーヒーを渡す前であれば実害はない。

・proof-of-stakeによるコイン生成は別途minerを必要としない。walletを起動しっぱなしにする必要も無いのだろうか?

・PoSの解説はPeercoinの白書が良さそう。https://en.bitcoin.it/wiki/Proof_of_Stakeはなんだかちょっと違うもの?

・でkernelって何?nonce?

・coinbaseって…要するにコイン生成の部分か。あれ?…proof-of-workブロックの中には複数のトランザクションがあるけどproof-of-stakeブロックとproof-of-stakeトランザクションの関係は?

・とりあえずコインを消費するときにコイン年数も消費するということなので、そのタイミングで自分の取引(とコイン年数がなかったのでまだproofできていない取引)をblockchainに追加するのだと思うけど…それだと取引量が増えた時に一貫したblockchainを保つの困難そう。

・kernelが2日後とかってことはproof-of-stakeトランザクションも2日後とかってこと?だとするとblockchainの署名の連鎖にどう使えばいいの?

・(日本語版じゃなく英語版を読み始めた)(いや翻訳に文句があるわけではなく)

・もしかして「ノードごとに探索の範囲を制限されている」ってだけであとは普通のproof-of-workのように「みんなで寄ってたかってハッシュを計算する」のかも?

・範囲の制限されたnonce=kernel→とstake情報とrewardの送り先=proof-of-stakeトランザクション→と複数のTx(最新)をまとめたブロック→のハッシュ(ハッシュターゲットに適合するものは確率的に見つかる)…というイメージでしょうか。

・一回りした感。

・世の中の総コイン年数が足りなくて誰もハッシュターゲットに適合するブロックを見つけられなかったらどうするのでしょう。うーむ、ぐずっている間に新たなTxが発生してブロック候補も更新されればいいのか。

・攻撃者は保有コイン量ではなく保有コイン年数が重要。

・コインをいっぱい持っている人はすぐにブロックを見つけられて、そこで全コイン年数を換金してしまうと新たなコイン年数が発生するまでそのノードはproof-of-stake的に使いものにならない。世の中の総コイン年数の安定のために少し控えてほしいがプロトコル的に強制されているわけではない。

・コインをあまり持っていない人はコイン年数がなかなか換金されずしばしば支払いでコイン年数が破棄されてしまうのをストレスに感じるはめに…(walletの「Stake: 0.00 PPC」ってどういう意味の表示なんでしょう)

・コインを消費するときにコイン年数も消費する(持っていないコインのコイン年数を持っているとかだと他のノードがコイン年数を確認するのが面倒そうだし)のであればproof-of-stakeに使えなかったコイン年数を換金できてもいいと思う。