Browse Source

PIP-0027: E-PASA updates for Pay To Key

Herman Schoenfeld 4 years ago
parent
commit
9664364073
1 changed files with 12 additions and 2 deletions
  1. 12 2
      PIP/PIP-0027.md

+ 12 - 2
PIP/PIP-0027.md

@@ -119,7 +119,15 @@ Layer-1 account checkum must be the following number:
 
 
 These strings are used to denote an account names and conform to the following rules.
 These strings are used to denote an account names and conform to the following rules.
 - By definition, they must **not** start with a digit. 
 - By definition, they must **not** start with a digit. 
-- String length must between 3..64 inclusive.
+
+### Account Name validation
+
+Account names in PascalCoin must be 3..64 characters in length. This validation rule is applied at the processing-tier level and not enforced by the EPASA grammar where a Pascal64 string is unbounded in size.
+
+### New Account validation
+
+EPASA is used to encode addresses for new accounts. An E-PASA of the form
+"@[1BvBMSEYstWetqTFn5Au4m4GFg7xJaNVN2]" is used to denote a "Pay to Key" style transaction where payments are sent to a "new account" containing the key encoded in the payload.
 
 
 #### Extended Checksum
 #### Extended Checksum
 
 
@@ -323,6 +331,8 @@ The below cases are only example E-PASA without valid checksums.
     <th>Description</th>
     <th>Description</th>
 </thead>
 </thead>
 <tbody>
 <tbody>
+    <tr><td>@[1BvBMSEYstWetqTFn5Au4m4GFg7xJaNVN2]</td><td>Pay To Key style transaction with Base58 encoded public key <b>without</b> checksum protection</td></tr>    
+    <tr><td>@[1BvBMSEYstWetqTFn5Au4m4GFg7xJaNVN2]:a054</td><td>Pay To Key style transaction with Base58 encoded public key <b>with</b> checksum protection</td></tr>        
     <tr><td>77-44[1BvBMSEYstWetqTFn5Au4m4GFg7xJaNVN2]</td><td>Account 77-44 with unencrypted (public) Base58 payload (bitcoin address) <b>without</b> checksum protection</td></tr>
     <tr><td>77-44[1BvBMSEYstWetqTFn5Au4m4GFg7xJaNVN2]</td><td>Account 77-44 with unencrypted (public) Base58 payload (bitcoin address) <b>without</b> checksum protection</td></tr>
     <tr><td>77-44[1BvBMSEYstWetqTFn5Au4m4GFg7xJaNVN2]:10cb</td><td>Checksum protected</td></tr>
     <tr><td>77-44[1BvBMSEYstWetqTFn5Au4m4GFg7xJaNVN2]:10cb</td><td>Checksum protected</td></tr>
     <tr><td>77-44(1BvBMSEYstWetqTFn5Au4m4GFg7xJaNVN2):7ba2</td><td>ECIES encrypted using <b>recipients</b> public key</td></tr>
     <tr><td>77-44(1BvBMSEYstWetqTFn5Au4m4GFg7xJaNVN2):7ba2</td><td>ECIES encrypted using <b>recipients</b> public key</td></tr>
@@ -378,7 +388,7 @@ For Layer-2 applications the ability for a receiver to auto-decode the E-PASA vi
 
 
 The following regex parses an e-pasa:
 The following regex parses an e-pasa:
 ```
 ```
-((?<AccountNumber>(0|[1-9]\d+))(?:(?<ChecksumDelim>-)(?<Checksum>\d{2}))?|(?<AccountName>(a|b|c|d|e|f|g|h|i|j|k|l|m|n|o|p|q|r|s|t|u|v|w|x|y|z|!|@|#|\$|%|\^|&|\*|\\\(|\\\)|-|\+|\\\{|\\\}|\\\[|\\]|_|\\:|\\"|`|\||\\<|\\>|,|\.|\?|/|~)(a|b|c|d|e|f|g|h|i|j|k|l|m|n|o|p|q|r|s|t|u|v|w|x|y|z|0|1|2|3|4|5|6|7|8|9|!|@|#|\$|%|\^|&|\*|\\\(|\\\)|-|\+|\\\{|\\\}|\\\[|\\]|_|\\:|\\"|`|\||\\<|\\>|,|\.|\?|/|~){2,63}))(?:(?<PayloadStartChar>[\[\(<\{])(?<PayloadContent>"( |!|\\"|#|\$|%|&|'|\\\(|\\\)|\*|\+|,|-|\.|/|0|1|2|3|4|5|6|7|8|9|\\:|;|\\<|=|\\>|\?|@|A|B|C|D|E|F|G|H|I|J|K|L|M|N|O|P|Q|R|S|T|U|V|W|X|Y|Z|\\\[|\\\\|\\]|\^|_|`|a|b|c|d|e|f|g|h|i|j|k|l|m|n|o|p|q|r|s|t|u|v|w|x|y|z|\\\{|\||\\\}|~)+"|0x(?:[0-9a-f]{2})+|[123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz]+)?(?:(?<PayloadPasswordDelim>:){1}(?<PayloadPassword>( |!|\\"|#|\$|%|&|'|\\\(|\\\)|\*|\+|,|-|\.|/|0|1|2|3|4|5|6|7|8|9|\\:|;|\\<|=|\\>|\?|@|A|B|C|D|E|F|G|H|I|J|K|L|M|N|O|P|Q|R|S|T|U|V|W|X|Y|Z|\\\[|\\\\|\\]|\^|_|`|a|b|c|d|e|f|g|h|i|j|k|l|m|n|o|p|q|r|s|t|u|v|w|x|y|z|\\\{|\||\\\}|~)+)?)?(?<PayloadEndChar>[]\)>\}]))?(?:(?<ExtendedChecksumDelim>:)(?<ExtendedChecksum>[0-9a-f]{2}[0-9a-f]{2}))?
+((?<AccountNumber>(0|[1-9]\d+))(?:(?<ChecksumDelim>-)(?<Checksum>\d{2}))?|(?<AccountName>(a|b|c|d|e|f|g|h|i|j|k|l|m|n|o|p|q|r|s|t|u|v|w|x|y|z|!|@|#|\$|%|\^|&|\*|\\\(|\\\)|-|\+|\\\{|\\\}|\\\[|\\]|_|\\:|\\"|`|\||\\<|\\>|,|\.|\?|/|~)(a|b|c|d|e|f|g|h|i|j|k|l|m|n|o|p|q|r|s|t|u|v|w|x|y|z|0|1|2|3|4|5|6|7|8|9|!|@|#|\$|%|\^|&|\*|\\\(|\\\)|-|\+|\\\{|\\\}|\\\[|\\]|_|\\:|\\"|`|\||\\<|\\>|,|\.|\?|/|~)*))(?:(?<PayloadStartChar>[\[\(<\{])(?<PayloadContent>"( |!|\\"|#|\$|%|&|'|\\\(|\\\)|\*|\+|,|-|\.|/|0|1|2|3|4|5|6|7|8|9|\\:|;|\\<|=|\\>|\?|@|A|B|C|D|E|F|G|H|I|J|K|L|M|N|O|P|Q|R|S|T|U|V|W|X|Y|Z|\\\[|\\\\|\\]|\^|_|`|a|b|c|d|e|f|g|h|i|j|k|l|m|n|o|p|q|r|s|t|u|v|w|x|y|z|\\\{|\||\\\}|~)+"|0x(?:[0-9a-f]{2})+|[123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz]+)?(?:(?<PayloadPasswordDelim>:){1}(?<PayloadPassword>( |!|\\"|#|\$|%|&|'|\\\(|\\\)|\*|\+|,|-|\.|/|0|1|2|3|4|5|6|7|8|9|\\:|;|\\<|=|\\>|\?|@|A|B|C|D|E|F|G|H|I|J|K|L|M|N|O|P|Q|R|S|T|U|V|W|X|Y|Z|\\\[|\\\\|\\]|\^|_|`|a|b|c|d|e|f|g|h|i|j|k|l|m|n|o|p|q|r|s|t|u|v|w|x|y|z|\\\{|\||\\\}|~)+)?)?(?<PayloadEndChar>[]\)>\}]))?(?:(?<ExtendedChecksumDelim>:)(?<ExtendedChecksum>[0-9a-f]{2}[0-9a-f]{2}))?
 ```
 ```
 
 
 After matching with the above regex, the named groups need to be extracted and validated as the below snippet shows
 After matching with the above regex, the named groups need to be extracted and validated as the below snippet shows