BitcoinCash Script をベースの仕様とし、BitcoinCash Script へのトランスパイラとして実現可能なものとする。
いくつかのオペコードを追加する。今後 BitcoinCash Script が拡張された場合でも対応できるよう求められる。
Counterparty プロトコルでは文字列が多用される。一方で BitcoinCash Script には文字列型は無い。 また文字列型の多用は、処理時間の面でもバッファオーバフローなどのセキュリティリスクの面でも、好ましくない。
Monapary Script では、前段の処理として、文字列を RIPEMD-160 でハッシュした結果と置換し BitcoinCash Script へ与える。 同時にハッシュ値と元のデータの対応テーブルを処理系が保持する。 この場合のハッシュ化の目的に秘匿は無く、元データが閲覧可能であっても問題は無い。
このテーブルは、 OPX_BUILDMESSAGE で Monaparty メッセージを作成する際に用いられる。
Bitcoin 系チェーンのコントラクトでは要求されないいくつかの機能が、Monaparty Script では必要である。 オペコードを追加する必要があるが、OP_NOP1 などを使うと、今後 BitcoinCash Script が拡張されたときに衝突する可能性がある。
そこで、Moaparty Script では、独自拡張のオペコードを 2 バイトとし、オペコード・プレフィックスを 0x50 とする。 0x50 は OP_RESERVED が既に割り当たっており、実行されない OP_IF ブランチ内にある場合を除き、トランザクションが invalid になる。 これが再定義される可能性は殆どない。
スタックトップの値に応じて、スタックにあるデータから、契約成立時に送信予約される Monaparty メッセージを作成する。 コントラクトにデフォルトのメッセージがある場合には、作成されたメッセージで上書きされる。同一の検証スクリプト内で、複数回 OPX_BUILDMESSAGE が呼ばれた場合には、最後に呼ばれたものが有効となる。
メッセージ作成に必要なデータがスタックにない場合は即座に invalid となる。
メッセージ作成が成功した場合、作成に使われたデータはスタックから取り除かれる。
現在のコントラクトの実行契機となったモナコインのブロック高をスタックトップに置く。
現在検証中のコントラクトがデプロイされたモナコインのブロック高をスタックトップに置く。
現在検証中のコントラクトの実行契機となった Monaparty の tx_index 値をスタックトップに置く。
現在検証中のコントラクトがデプロイされた Monaparty の tx_index 値をスタックトップに置く。