Browse Source

PIP-0032A: update to reflect account state usage rather than type

Herman Schoenfeld 6 years ago
parent
commit
74c243f322
1 changed files with 39 additions and 12 deletions
  1. 39 12
      PIP/PIP-0032A.md

+ 39 - 12
PIP/PIP-0032A.md

@@ -37,7 +37,7 @@ Suppose Alice has 100 PASC and Bob has 1 BTC, and they wish to perform an atomic
 
 4. Alice owns account **X** and deposits 100 PASC into **X** and sets it for Private Sale to Bob as follows:
   
-   - X.Type = ***\<Hash Locked>*** 
+   - X.State = ***\<HLTC_A>*** 
    - X.Data = **CODE**
    - X.BuyerKey = **B**
    - X.SalePeriod = **3 weeks** ;/ specified in block numbers
@@ -95,25 +95,47 @@ _Notice that Alice's offer to Bob was locked for 3 weeks, yet Bob's offer to Ali
 
 The following changes are required to implement this type of HLTC in PascalCoin.
 
-#### Operation Update(s): OP_BuyAccount and OP_Transaction
+#### New Account State
 
-The consensus rule when purchasing an account listed for private sale requires a minor change. This rule applied for both OP_BuyAccount and OP_Transaction.
+A new TAccountState called ```as_HLTC_PASA``` is required.
 
 ```pascal
-let S = target PASA
-let T = purchasing operation (can be either OP_BuyAccount or OP_Transaction)
 
-... implement existing consensus rules ...
+TAccountState = (as_Unknown, as_Normal, as_ForSale, as_HLTC_PASA);
 
-// PIP-0032A: Atomic Swap 
-if (S.SaleType = PrivateSale) and (S.Type = <HashLocked>) then begin
-  // It's an atomic swap private sale, sender must provide secret
-  if SHA2_256(T.Payload) <> S.Data then
-    Error "Hash-locked accounts require correct hash pre-image when purchasing. Purchaser did not provide correct hash pre-image.";
+```
+
+This new state will result in behaviour identical to ```as_ForSale``` except with an additional consensus rule.
+
+#### Operation Update(s): OP_Transaction, OP_BuyAccount
+
+
+The consensus rules for OP_Data needs updating to execute  ```as_HLTC_PASA``` is identical to state ```as_ForSale``` but with the following additional checks
+
+```pascal
+
+let A = target PASA
+let O = purchasing operation (can be either OP_BuyAccount or OP_Transaction)
+
+...... same consensus rules for as_ForSale (in private mode) ....
+
+  // PIP-0032A: Atomic Swap 
+if (A.accountInfo.state = as_HLT  as_HLTC_PASA: begin
+  if (A.accountInfo.new_publickey = CT_PublicKey_Nil) then
+    Error 'Invalid PASA HLTC, account did not specify an endpoint key';
+
+  ... implement same consensus rules for as_ForSale, assuming a private sale mode ...
+
+  // Check hashlock
+  if SHA2_256(O.payload) <> A.account_data then
+  Error "Hash-locked accounts require correct hash pre-image when purchasing. Purchaser did not provide correct hash pre-image.";
 end;
+
 ```
 
-**NOTE**: An Account Type number must be reserved for _\<HashLocked>_. The reservation of account type numbers is delegated to a future PIP.
+#### Misc Core Changes
+
+Since a new account state is being introduced, the code-paths for as_ForSale cannot be re-used and must be copied/pasted, or altered to check for this condition. These details are left to the implementor.
 
 ## Rationale
 
@@ -127,6 +149,11 @@ In conclusion, due to the low cost vs the significant benefits of this change, t
 ## Backwards Compatibility
 
 This change is not backwards compatible and requires a hard-fork activation. 
+
+## Acknowledgements
+
+ * Albert Molina for suggesting use of account state rather than account type.
+
  
 ## Links