nemの仕様罠
Catapult
トランザクションのメッセージ
トランザクションのメッセージは 1024 文字(byte) までとの記述があるが、メッセージタイプで先頭 1 byte 使用するので、Payloadとして載せられるのは 1023 byte となる。
1024 byte を超えるとノードが Failure_Transfer_Message_Too_Largeを返す。
確認コード:
UInt64#compact
JSの仕様上、53bitまでしか整数値を正しく扱えないので、それを超える場合、compact() は number を返さずに、元の配列型([lower, heigher])をそのまま返す実装になっている。
ライブラリ利用側はこれが返却されたときを考慮しておかないと、バグの原因になりうる。
(それまでにブラウザが対応するか、なんらかの方法で気にしなくてよいようになるか…)
/blocks/{height}/limit/{limit}の挙動
* (追記)どうやら現状は25,50,75,100しか受け付けない仕様
* (追記)以下、ちょっと違うかも。整理して書き直す。しかし指定と挙動が直感的ではないのは確か
heightがlimitで取ってこようとしている数が無いほど新しいブロック高を指定した場合の返却数が不安定?
ブロック高が少し巻き戻ったURLへリダイレクトされる。
(例) 現在90ブロックで、80ブロックを指定し、20件のlimitを指定した場合
HEIGHT=$(curl -s http://api.beta.catapult.mijin.io:3000/chain/height | jq .height[0]); echo $HEIGHT
curl -sL http://api.beta.catapult.mijin.io:3000/blocks/$HEIGHT/limit/100 | jq 'length'
curl -sL http://api.beta.catapult.mijin.io:3000/blocks/$(($HEIGHT - 100))/limit/100 | jq 'length'
最高ブロック高からlimitを引いたブロック高を指定すればlimit分返ってくる。
limitが0〜25未満、または101以上を指定すると、25としてリダイレクトされる。
curl -sL http://api.beta.catapult.mijin.io:3000/blocks/1/limit/0 | jq 'length'
curl -sL http://api.beta.catapult.mijin.io:3000/blocks/1/limit/24 | jq 'length'
curl -sL http://api.beta.catapult.mijin.io:3000/blocks/1/limit/101 | jq 'length'
上記はすべてリダイレクトされ、25件の結果が返ってくる。
また、最小の取得単位が25件のため、heightの指定も26を超えない限りは1から25ブロックまでが返ってくる。
(2019/01/22)