Cardano のスマートコントラクト言語 Plutus の開発チームは、次のハードフォーク Dijkstra で使える新しい組み込み関数として、配列から複数の要素をまとめて取り出す multiIndexArray と、トークンの集まり(Value)を扱う 4 つの関数を有効にしました。10 月 23 日に IOG が公開した開発週報が伝えており、Plutus V1 から V4 まで、すべての言語版で使えるようにする変更です。
コードの上では、これらの関数はこれまで「将来のプロトコルバージョン」に置かれ、どのハードフォークで入るかが決まっていませんでした。それが Dijkstra に結びつけられたことで、10 月 23 日に公開テストネットが始まった Dijkstra の中身が一つ具体になります。ただしオンチェーンで使えるのは、Dijkstra のハードフォークが起きてからです。何ができるようになるのかを、元になった改善提案(CIP)に沿って見ていきます。
「将来」から「Dijkstra」へ、5 つの関数の行き先が決まった
変更の本体は、GitHub の plutus リポジトリで 10 月 17 日に統合された PR #8006「Enable new builtins at Dijkstra」です。差分は小さく、どの組み込み関数がどのプロトコルバージョンから使えるかを定めた表で、5 つの関数の行き先を futurePV(将来のバージョン)から dijkstraPV に書き換えています。
対象の 5 つは次のとおりです。
multiIndexArray(CIP-0156)policies・assetCount・keepPolicies・dropPolicies(CIP-0168)
同じ表の書き換えは V1・V2・V3・V4 の 4 つの言語版すべてに入りました。V4 は Dijkstra で新しく使えるようになる言語版で、これまで「Dijkstra で使える関数」の一覧からこの 5 つだけが外れていましたが、今回の変更で全部がそろいます。既存の V1〜V3 で書かれたスクリプトも、Dijkstra 以降は同じ関数を呼べる、ということです。
Intersect が 10 月 21 日に出した Plutus Core チームの更新情報は、あわせて multiIndexArray の適合性テスト(PR #7996)を加えたことも伝えています。別の実装が同じ結果を返すかを確かめるための試験で、ノードの実装が複数ある今の Cardano では欠かせない準備です。
multiIndexArray は、配列の読み出しを 1 回で済ませる
Plutus Core には配列の型があり、indexArray で 1 つの要素を一定の手間で読み出せます。ただ、複数の要素を取り出すには indexArray を何度も呼ぶ必要があり、そのぶんスクリプトが大きくなり、実行コストもかさみます。
CIP-0156 の multiIndexArray は、配列と整数の添字のリストを受け取り、指定した順番で要素をリストにして返します。同じ添字を繰り返せば、同じ要素が何度でも返ります。添字が範囲外のとき、または添字が 1,024 個を超えるときは、呼び出し全体が失敗します。CPU の消費は添字の数の 2 乗、メモリは添字の数に比例して見積もられます。
上限を 1,024 にしたのは、コストの計算が添字の数しか見られず、大きなリストでは実際の手間とのずれが広がるためだと CIP は説明しています。実際の使い方は数十個の読み出しで、千単位にはならないという見立てです。
Value の 4 関数は、プロトコル用のトークンを切り分ける
Value は、ADA と各種トークンの組み合わせを表す型です。van Rossem のハードフォークで入った CIP-0153 は、Value を Plutus の中で効率よく扱う型を設け、insertCoin・lookupCoin・unionValue などの関数を加えました。CIP-0168 は、そこに足りない操作を補う提案です。
policies— Value に含まれるポリシー ID(トークンの発行元を示す識別子)を昇順で並べて返すkeepPolicies— 指定したポリシー ID の分だけを残した Value を返すdropPolicies— 指定したポリシー ID の分を取り除いた Value を返すassetCount— Value に含まれる「ポリシー ID とトークン名の組」の数を返す
CIP が挙げる使い道の一つは、DEX の注文などで使う「プロトコル用トークン」の検査です。注文を表す UTxO には、取引の対象になる資産と並んで、注文の中身を示すトークンがちょうど 3 個入っていなければならない、といった条件があります。これまでは Value を先頭から順にたどって確かめる書き方が多く、CIP によれば、パターンの見落としからプロトコル用トークンを不正な UTxO へ引き出せた事例もありました。keepPolicies と dropPolicies でプロトコル用の分とそれ以外に分け、assetCount で個数を確かめれば、監査する側にも読みやすい形で書けます。
もう一つは、出力に付く資産の数を抑えることです。「ある量以上の Value を出力に入れる」という条件だけだと、悪意のある取引が数百個の不要なトークンを詰め込み、その出力を後で使うコストを跳ね上げることができます。assetCount で上限を設ければ、正直な利用者が少し余分なトークンを含めるのは許しつつ、この手の嫌がらせを安く防げます。
10 月 22 日には、keepPolicies と dropPolicies に渡せるポリシー ID を 256 個までに絞る変更(PR #8013)も統合されました。これに合わせて、Value 側に置かれていた 8,191 ポリシーの上限は外され、コストの見積もりも測り直されています。
ハードフォークまでに残る手順
CIP-0156 の本文は、実装が Plutus Core のリポジトリに入ったことを達成済みとしたうえで、台帳(cardano-ledger)のコストパラメータの更新と、cardano-node への組み込みとハードフォークへの予定入りを残りの条件に挙げています。CIP-0156・CIP-0168 とも、状態はまだ Proposed です。
確認できる次の一点は、Dijkstra 公開テストネットの段取りにある node 11.2 のプレリリースです。この版が出たあと、テストネットはプロトコルバージョン 12(Dijkstra)へ切り替わる段取りで、5 つの関数を実際のチェーンの上で試せるかどうかは、この切り替えのあとに確かめられます。Aiken などの言語側がいつ対応するかも、各リポジトリのリリースノートで見えてくるはずです。dApp の開発者にとっては、Value をたどる自前の処理を、この関数で置き換えられる箇所がどこにあるかを洗い出しておく時期にあたります。
ことば
- 組み込み関数(builtin) — Plutus の実行環境に最初から備わる関数。スクリプトで同じ処理を書くより安く速く動くため、よく使う操作ほど組み込みにする価値があり、追加にはハードフォークが要ります。
- ポリシー ID — Cardano のネイティブトークンの発行ルールを表すスクリプトの識別子。同じポリシー ID のトークンは同じ発行元に属するので、keepPolicies / dropPolicies はこれを単位に Value を切り分けます。
- Dijkstra — Conway の次に予定されている Cardano のハードフォーク。Plutus V4 や Leios の段階導入などが入る予定で、10 月 23 日に公開テストネットが始まりました。
一次ソース / 関連リンク
- IOG 公式 X の告知(今週の開発週報)
https://x.com/IOGroup/status/2113594522248888658
Weekly development report as of 2026-10-23(Essential Cardano)
essentialcardano.io
Plutus Core チームの更新情報(2026-10-21・Intersect)(updates.cardano.intersectmbo.org)
Enable new builtins at Dijkstra(PR #8006・GitHub)(GitHub)
CIP-0156: Plutus Core Builtin Function – multiIndexArray(cips.cardano.org)
CIP-0168: More BuiltinValue Functions(cips.cardano.org)
- 既報: Plutus V4 の台帳の型、CIP-0195 でリスト表現に
https://sipo.tokyo/signal-20261019-7a58a17d/ - 既報: Aiken 1.1.24、PV11 の Value 組み込み関数に対応
https://sipo.tokyo/signal-20260927-e5f46531/

