Symbolメモ

## これは？

私の単なるメモ。

## boostがダウンロードできない

本家に変更すればいける。

```diff:jenkins/catapult/installDepsLocal.py
	def download_boost_unix(self):
		version = self.versions['boost']
		archive_name = f'boost_{version.replace(".", "_")}'
		tar_filename = f'{archive_name}.tar.gz'
-		tar_source_path = f'https://boostorg.jfrog.io/artifactory/main/release/{version}/source/{tar_filename}'
+		tar_source_path = f'https://archives.boost.io/release/{version}/source/{tar_filename}'

		self.process_manager.dispatch_subprocess(['curl', '-o', tar_filename, '-SL', tar_source_path])
		self.process_manager.dispatch_subprocess(['tar', '-xzf', tar_filename])
		self.process_manager.dispatch_subprocess(['mv', archive_name, 'boost'])
```

## PULL_BLOCKしてみた
```
> python block.py finnel.harvestasya.com 7900 3191525
(signature: 2973D3877AF5A4FA0BA199346AF97B43C4C2A7F9A63F6422B6AC529139F4A962B4D625FB8A41560E1380C854D5AE160930A127A43A59268B282F80DC86981502, signer_public_key: 6DE2C57BB685D44F7992F67CF231EC6F33DC44AF5B985C15D7C1710DEB503CD8, version: 0x1, network: NetworkType.MAINNET, type_: BlockType.NORMAL, height: 0x000000000030B2E5, timestamp: 0x000000165533A0EC, difficulty: 0x000066455F53239A, generation_hash_proof: (gamma: 41547D6F1B5F92567A33CB7D96E68CB83A884D7581DC2F5E775B79B85DE52851, verification_hash: C4BCBF001319D67385F31B9FA685D354, scalar: 49A4EA5CB03BFBA13A30F237B2249A0B1A95C989F4BF7EF1A9E2BB5E75F21306, ), previous_block_hash: 761572778DC22FBF19B1D8530027222FB3254F3FEDF48A17B8ABBC7D5, version: 0x1, network: NetworkType.MAINNET, type_: TransactionType.TRANSFER, recipient_address: 687E4D36B0D49FD0FA480BFD7176A4CE14B1C53D04A2B739, mosaics: [\'(mosaic_id: 0x6BED913FA20223F8, amount: 0x0000000000007530, )\'], message: 006564303464663034643034643034553246736447566b58313948417a714c4258672f596c516c397a764d51562f4e73784163585342343565384c487664535635523977465a627968644835676351526f616c306d334768436877715a655133794f417956796c687a56555943364667534c505630416375494777634746303931337044674f572f3732573851396e626366304f39462f567147554b7a437565672b7131424549385869724e5746464e2f59704452614f36615a386b4830744867596151425263507a635137436f512f6b524a746e3555706c4b2f4d6d44353845554b4b434e4658685743574a7258544f6e4b63632b734737464774477a2b4c4f6a37635745314d73726d6235302b614a77662f4945334c4948785a30766b57485a466e513d3d, )"], cosignatures: [], )'], )
```

```
> python block.py finnel.harvestasya.com 7900 3191538
(signature: 5D435DC9A8A551B06E2426C3739222EB6C969926B867753CDC38F7E1BAC6FCF9E865EFBE569E1FF77D2BFA095C875929E3F520EEA004DA20B2A6A684D2DD0006, signer_public_key: 0A243F7C0291D936FB7EE6701B66AC911D257844FAD4E109E52B7DA25249317D, version: 0x1, network: NetworkType.MAINNET, type_: BlockType.NORMAL, height: 0x000000000030B2F2, timestamp: 0x000000165539AD8F, difficulty: 0x000065D1E71F5761, generation_hash_proof: (gamma: DDE69B31BB30661AE2ADBF843CE9D657162977ED3B20EAF814CEF285746F61E2, verification_hash: 80890173F7F939B2A4F2E57D5E624B9D, scalar: A1B8E0EE75223D55A6284E5DC30EC5648E157739AEEC64A06A9B4072561BB909, ), previous_block_hash: 64C526DA7C3A0A41D92D0D84220E6710B2969CB877CEFFC680B1AA86526535F7, transactions_hash: DE2C3F84ABBBCCD981A1BBF3264A94F23D9ED3521B81CA1E714DD62658C9A512, receipts_hash: 1A07EC158C526E752C55EDE2E0677A387215F4276623617C435E45077BF024C9, state_hash: 18D9F714B63782586DE7DBC21B0A04B27307E460CDCBCF3D5D978BAECA954A41, beneficiary_address: 68B209715508E5CFD3B4EA7CD2B45F714BA9A4C4520A0E74, fee_multiplier: 0x00000057, transactions: ['(signature: 19FD959DC34E403605AE37AEE6867219BBD1758705E642EAD11BE50A194BD6BB8815D309F4880CC9EB2D98D5E33B7EFD3B281B8E13941695407E4E270A356608, signer_public_key: B8245BCB622D5C67623F86F47BA3E530027222FB3254F3FEDF48A17B8ABBC7D5, version: 0x2, network: NetworkType.MAINNET, type_: TransactionType.AGGREGATE_COMPLETE, fee: 0x000000000000EEC0, deadline: 0x0000001655A6FA98, transactions_hash: AAAA890FD6BB59F023358BFEEBB43B7850404683723AD234AD4843CF2B213E75, transactions: [\'(signer_public_key: B8245BCB622D5C67623F86F47BA3E530027222FB3254F3FEDF48A17B8ABBC7D5, version: 0x1, network: NetworkType.MAINNET, type_: TransactionType.SECRET_LOCK, recipient_address: 687E4D36B0D49FD0FA480BFD7176A4CE14B1C53D04A2B739, secret: A4772FD9EF1D7EA62559A880668035935ED97750B72374452ACC598156953CCF, mosaic: (mosaic_id: 0x0BCF7F87A4175ABE, amount: 0x0000000000000001, ), duration: 0x00000000000001A4, hash_algorithm: LockHashAlgorithm.HASH_256, )\', "(signer_public_key: B8245BCB622D5C67623F86F47BA3E530027222FB3254F3FEDF48A17B8ABBC7D5, version: 0x1, network: NetworkType.MAINNET, type_: TransactionType.TRANSFER, recipient_address: 687E4D36B0D49FD0FA480BFD7176A4CE14B1C53D04A2B739, mosaics: [\'(mosaic_id: 0x6BED913FA20223F8, amount: 0x0000000000007530, )\'], message: 006564303464663034643034643034553246736447566b58312f326a6a315a47453979302f437843666a6d38776f584f443753646a7148694c756c6e4832613853556477706b616161794d664c506946304f7632453637725a545367794a644b6979324a6c43664149584b44774c784a706377506566643948424c756b6d6d7a50664e684a5161354b456135476c4c78646b66584d78416d704e374a41463830575578513175474d5668387747726d674f317a34434a32766e695a3569537257767759395272696b4e63433665453676344a585466552f4e763636696371533137753968336d577434615578717a2b556e6b70513264415866394d5a354e416d5662517438444b47537147486c6156582b736a68376b484b77432b392b39346470594849673d3d, )"], cosignatures: [], )'], )
```


## トランザクションへの署名で何が変わるか
署名前のトランザクションペイロード
```
BF0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000B863173F9E4924CA5EB63BFC13689E27F603C29AD8C82615A10531329BF7A94E00000000019854419C4A00000000000079DB73D6080000009852701708153EB74C71713F0AC7C56F5DE5670E061759540F00010000000000CE8BA0672E21C07240420F00000000000048656C6C6F2C2053796D626F6C21
```

署名
```
9F0E247F8C0B71033C2DB64051369F57DC37DAD7D43AEE89964A71F065E45E1EA9D84C3B9BE4FB2C8107702FC7D1D3D58E4C329EDEEB24432D35D5AC8AAA340F
```

署名後のペイロード
```
BF000000000000009F0E247F8C0B71033C2DB64051369F57DC37DAD7D43AEE89964A71F065E45E1EA9D84C3B9BE4FB2C8107702FC7D1D3D58E4C329EDEEB24432D35D5AC8AAA340FB863173F9E4924CA5EB63BFC13689E27F603C29AD8C82615A10531329BF7A94E00000000019854419C4A00000000000079DB73D6080000009852701708153EB74C71713F0AC7C56F5DE5670E061759540F00010000000000CE8BA0672E21C07240420F00000000000048656C6C6F2C2053796D626F6C21
```

ペイロード16バイト後に署名がセットされる。
`attachSignature`でJson形式のペイロードが返ってくるが、同時にトランザクションオブジェクトも変更されている。


## コンテナからcatapult実行ファイルをホストにコピー

コンテナIDを調べる。
```
docker ps
```

Docker上のcatapult実行ファイル群をホストにコピーする。
```
docker cp <コンテナID>:/usr/catapult/lib .
```

以下の場合、コンテナIDは`f9c5ec94ecc3`となる
```
>docker ps
CONTAINER ID   IMAGE                                      COMMAND                   CREATED              STATUS              PORTS                    NAMES
f9c5ec94ecc3   symbolplatform/symbol-server:gcc-1.0.3.6   "/bin/bash /symbol-c…"   About a minute ago   Up About a minute   0.0.0.0:7900->7900/tcp   node
```

コピーコマンドは以下のようになる。
```
docker cp f9c5ec94ecc3:/usr/catapult/lib .
```

## 使用容量とネットワーク上にファイルを持って行くなら？
書き込み速度が遅いとbrokerが落ちるので、書き込みがないファイル達なら持って行けるのでは？

### target/databases/db
`collection-*.wt`とか`index-*.wt`のファイルがあるディレクトリ。
ノード起動時にcollection、indexともに多数のファイルが更新される。

collection、indexもブロック生成に応じて更新されるので、ネットワークに持って行くには向いていない。圧縮されるのか容量は比較的控えめ。

### target/nodes/node/data
ブロックデータが格納されるディレクトリ。容量の大部分はココ。
00000などの数字ディレクトリにブロックデータが格納されている？
過去ブロックは更新されない。

が、本当に使用しているのは`statedb/AccountStateCache`ディレクトリ。中のファイルは何かのタイミングで更新される。ネットワーク上に持って行くのは不向きか？

## SDK使わずにサブスクリブ

NodeJSのwscatを使用する場合。

```bash
npm install -g wscat
```

接続するとuidが返ってくるので、これを付けて subscribe を登録する。
```
>wscat -c ws://2.dusanjp.com:3000/ws
Connected (press CTRL+C to quit)
< {"uid": "BM2ZVPV4JU2LF536WLCI7AT66HGSZNHU"}
> {"uid": "BM2ZVPV4JU2LF536WLCI7AT66HGSZNHU", "subscribe": "block"}
```

unsubscribe にすると該当のサブスクリブが解除される。

例えば新しいブロックを検知するのは、以下の通り。
```
>wscat -c ws://2.dusanjp.com:3000/ws
Connected (press CTRL+C to quit)
< {"uid": "BM2ZVPV4JU2LF536WLCI7AT66HGSZNHU"}
> {"uid": "BM2ZVPV4JU2LF536WLCI7AT66HGSZNHU", "subscribe": "block"}
< {"topic":"block","data":{"block":{"signature":"BBD61DE00F2DC4876913F729C88CD35EE0906C0293CF60D14731BD2DF33BAD42F624E2EE82A5D82C0838E72FA74BF497D3DEF8BD9F5ECD080C6765DA1A5B6E02","signerPublicKey":"B8C83E30D74736E90D3318551998016446CF68C98D0932B688FD1463AAE6D125","version":1,"network":152,"type":33091,"height":"1073075","timestamp":"36148970963","difficulty":"10000000000000","proofGamma":"568423A28379B91AF15C86248C639B699FD54476B2E7FAB5BA9C57C99C4A5806","proofVerificationHash":"0362315A6C172D10A53626F51DED8B16","proofScalar":"B1D6B12DD02D07598C591B27AC84276D2566E72B2318A6C6AA7D948FF736BA0E","previousBlockHash":"068B38469F5BF3B2C1971AC28C49EA05C820F01FD75584477B7009A4A2D8AFFD","transactionsHash":"0000000000000000000000000000000000000000000000000000000000000000","receiptsHash":"FA6F6C53C94C1991568551E57469F39A7BCE0D0DB4E47F31ACCD21D3F26C9456","stateHash":"C4CF8A98E88BF786E80350789D41E359628B6BB3FDCB9DA4A77B044DD3FE45F0","beneficiaryAddress":"987CCA1A46DDD5D1C4341EA0332FEC10EAF05FA99E53A705","feeMultiplier":0},"meta":{"hash":"6CF8B5E50F225A467B0B48932B798A745196DB98B30012205DCA459B58A0869A","generationHash":"CFA764BF6CE8BFAB423D5C29ED0FF6C1C3F62B0E1B32DFFDFA44F3143A7481DB"}}}
```

他、こんなものがあります。
```
{"uid": "JADUTIC3Z5GACNVIHXRPLXQ4ACNOZQOP", "subscribe": "block"}
{"uid": "JADUTIC3Z5GACNVIHXRPLXQ4ACNOZQOP", "subscribe": "finalizedBlock"}
{"uid": "JADUTIC3Z5GACNVIHXRPLXQ4ACNOZQOP", "subscribe": "confirmedAdded"}
{"uid": "JADUTIC3Z5GACNVIHXRPLXQ4ACNOZQOP", "subscribe": "unconfirmedAdded"}
{"uid": "JADUTIC3Z5GACNVIHXRPLXQ4ACNOZQOP", "subscribe": "unconfirmedRemoved"}
{"uid": "JADUTIC3Z5GACNVIHXRPLXQ4ACNOZQOP", "subscribe": "partialAdded"}
{"uid": "JADUTIC3Z5GACNVIHXRPLXQ4ACNOZQOP", "subscribe": "partialRemoved"}
{"uid": "JADUTIC3Z5GACNVIHXRPLXQ4ACNOZQOP", "subscribe": "cosignature"}
{"uid": "JADUTIC3Z5GACNVIHXRPLXQ4ACNOZQOP", "subscribe": "modifyMultisigAccount"}
{"uid": "JADUTIC3Z5GACNVIHXRPLXQ4ACNOZQOP", "subscribe": "status"}
```

## dual と api ノードの違い

当たり前だけど、アセンブリが違う。

```config-node.properties
# dualノード
assembly: dual
# apiノード
assembly: api
```

peer ないので harvesting エクステンションが無効になる。
syncsource エクステンションも無効になる。ブロック情報をプル/プッシュしたりしてるエクステンション。

```config-extensions-server.properties
# dualノード
extension.harvesting = true
extension.syncsource = true
# apiノード
extension.harvesting = false
extension.syncsource = false
```

## ソケット通信でリジェクトされる

新規にノード証明書を作成して接続する場合、一番信頼度の低い 1\.となるため。
連続して接続するとリジェクトされる。1, 2 分程を開けると接続可能。

1\. 一度も同期したことのないアカウントからの接続
2\. 同期したことのあるアカウントからの接続
3\. 初期接続リストに載っているアカウントからの接続
4\. ローカル接続

設定の localNetworks に追記すればローカル判定してくれるかも（未確認）

```config-node.properties
localNetworks = 127.0.0.1, 172.20.0.25
```

## 1 から同期させるときの設定

ブロックディスラプターが不足するので適当に増やす。
10 べぇはやり過ぎか…

```my-preset.yml
blockDisruptorSlotCount: 40960
blockDisruptorMaxMemorySize: 3000MB
```

## 同期終わる前に harvesters.dat リストアしたら？

同期済のブロックより未来に委任するアカウントが消える。