From 3ad9194b6cbc5c7a5d4762e3cc0797ad04b1f0f3 Mon Sep 17 00:00:00 2001 From: Konstantin Akimov Date: Fri, 17 Apr 2026 02:40:26 +0700 Subject: [PATCH 1/2] docs: v2 asset locks - automatic funding + bech32 addresses --- dip-0027.md | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/dip-0027.md b/dip-0027.md index 8a575f11..e81a22fc 100644 --- a/dip-0027.md +++ b/dip-0027.md @@ -20,6 +20,7 @@ * [Overview](#overview) * [Asset Locking](#asset-locking) * [Asset Lock Transaction](#asset-lock-transaction) + * [Version 2: Automatic Credit Assignment](#version-2-automatic-credit-assignment) * [Proof of Finality](#proof-of-finality) * [Asset Unlocking](#asset-unlocking) * [Asset Unlock Transaction](#asset-unlock-transaction) @@ -48,6 +49,7 @@ Switching to the credit pool relieves this issue by allowing withdrawals to be p * [DIP-0007: LLMQ Signing Requests / Sessions](https://github.com/dashpay/dips/blob/master/dip-0007.md) * [DIP-0010: LLMQ InstantSend](https://github.com/dashpay/dips/blob/master/dip-0010.md) * [DIP-0011: Identities](https://github.com/dashpay/dips/blob/master/dip-0011.md) +* [DIP-0018: Dash Platform Payment Address Encodings](https://github.com/dashpay/dips/blob/master/dip-0018.md) ## System Requirements @@ -84,6 +86,16 @@ Each Asset Lock transaction must create an unspendable output by using an OP_RET * Its value is the amount of Dash to be locked * The sum of all TxOut amounts must equal the value of the output +#### Version 2: Automatic Credit Assignment + +A `version = 2` Asset Lock transaction signals that each entry in `credit_outputs` MUST be automatically credited by Platform to the Identity matching the entry's public key hash or script hash, without an accompanying Identity Registration or Top-Up state transition. + +`version = 2` extends the set of allowed `credit_outputs[i].scriptPubKey` forms to `{P2PKH, P2SH}`; all other consensus rules are unchanged from `version = 1`. + +The `v24` hard fork enables `version = 2`: prior to activation only `version = 1` is valid; after activation `version ∈ {1, 2}` is valid. + +[DIP-0018](./dip-0018.md) Platform P2PKH addresses (`dash1k…`, `tdash1k…`) MUST be encoded as P2PKH `credit_outputs` entries; Platform P2SH addresses (`dash1s…`, `tdash1s…`) MUST be encoded as P2SH `credit_outputs` entries. + ### Proof of Finality It is important to note that Dash Core transactions achieve finality through ChainLocks and InstantSend locks. Therefore, these locks can be used to prove that value has been added to the credit pool and is ready for Platform use. For example, Platform can safely increase an Identity’s balance without concerns that the related Asset Lock transaction will be double-spent. From 9ac939d6549b877a1d3b9df224f8e1aaa7f34583 Mon Sep 17 00:00:00 2001 From: Konstantin Akimov Date: Tue, 12 May 2026 00:33:04 +0700 Subject: [PATCH 2/2] Apply suggestions from code review Co-authored-by: thephez --- dip-0027.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/dip-0027.md b/dip-0027.md index e81a22fc..10e9e78a 100644 --- a/dip-0027.md +++ b/dip-0027.md @@ -49,6 +49,7 @@ Switching to the credit pool relieves this issue by allowing withdrawals to be p * [DIP-0007: LLMQ Signing Requests / Sessions](https://github.com/dashpay/dips/blob/master/dip-0007.md) * [DIP-0010: LLMQ InstantSend](https://github.com/dashpay/dips/blob/master/dip-0010.md) * [DIP-0011: Identities](https://github.com/dashpay/dips/blob/master/dip-0011.md) +* [DIP-0017: Dash Platform Payment Addresses and HD Derivation](https://github.com/dashpay/dips/blob/master/dip-0017.md) * [DIP-0018: Dash Platform Payment Address Encodings](https://github.com/dashpay/dips/blob/master/dip-0018.md) ## System Requirements @@ -88,9 +89,9 @@ Each Asset Lock transaction must create an unspendable output by using an OP_RET #### Version 2: Automatic Credit Assignment -A `version = 2` Asset Lock transaction signals that each entry in `credit_outputs` MUST be automatically credited by Platform to the Identity matching the entry's public key hash or script hash, without an accompanying Identity Registration or Top-Up state transition. +When Dash Platform implemented the Platform address system defined by [DIP-17](https://github.com/dashpay/dips/blob/master/dip-0017.md), there was no way to directly fund a Platform address from the Core chain. Version 2 Asset Lock transactions enable transferring Core chain funds to Platform addresses by signalling that each entry in `credit_outputs` MUST be automatically credited to the Platform address matching the entry's public key hash or script hash. No accompanying state transition is required. -`version = 2` extends the set of allowed `credit_outputs[i].scriptPubKey` forms to `{P2PKH, P2SH}`; all other consensus rules are unchanged from `version = 1`. +Version 2 extends the set of allowed `credit_outputs[i].scriptPubKey` forms to `{P2PKH, P2SH}`; all other consensus rules are unchanged from version 1. The `v24` hard fork enables `version = 2`: prior to activation only `version = 1` is valid; after activation `version ∈ {1, 2}` is valid.