Skip to content

Latest commit

 

History

History
400 lines (393 loc) · 34.8 KB

ROADMAP.md

File metadata and controls

400 lines (393 loc) · 34.8 KB

Technical Roadmap

This document presents the technical roadmap of the Purplecoin project. Please note that these are subject to change before the release. The roadmap branches off a higher level with subsections describing a greater level of detail.

Purplecoin Core

  • Consensus layer

    • Implement sector blocks
    • Implement shard blocks
    • Implement RSA accumulators
    • Optimise hashing to primes
    • Use multiple accumulators per block
    • Benchmark accumulator code in order to determine optimum number of sectors and shards
    • Implement difficulty calculation
    • Green PoW implementation
    • Update RandomX to GhostRider
    • Sequence PoW algorithms
    • Choose minimum mainnet difficulty
    • Determine ASIC friendly hash functions
    • Aggregate outputs with same spend script and receiver in the same block
    • Implement canonical transaction ordering
    • Implement partially spendable outputs
    • Block serialization
    • Transaction serialization
    • Script arguments serialization
    • Headers MMR implementation
    • Find a way to dynamically determine the minimum fee for acceptance into the mempool
    • Implement optimal atomic asset exchange script and use it as a default script
    • Implement coloured assets
    • Implement VM opcodes

      • OP 0x00 Func - Start a function definition
      • OP 0x01 BaseContext - Pushes to the top of the stack the base cryptographic context, which can be used to create application specific contexts by appending other contexts to it before being passed to cryptographic opcodes. The base context is specific to the current shard.
      • OP 0x02 OpenImplicitCert - Pops a public key, transcript, context, and implicit certificate from the top of the stack and extracts the public key from the certificate.
      • OP 0x03 OpenImplicitCertGlobal - Pops a public key, transcript, and an implicit certificate from the top of the stack and extracts the public key from the certificate. If successful, pushes the public key to the top of the stack. This receives the global context (network name) and is thus global. Public keys work on all shards. Use OP_OpenImplicitCertScoped for public keys which work only on a specific shard.
      • OP 0x04 OpenImplicitCertScoped - Pops a public key, transcript, and an implicit certificate from the top of the stack and extracts the public key from the certificate. If successful, pushes the public key to the top of the stack. This receives the current context of the shard and is thus scoped to it. Public keys only work for this shard. Use OP_OpenImplicitCertGlobal for public keys which work on all shards.
      • OP 0x05 VerifyInline - Pops a transcript, signature, public key, and message, then verifies inline. Pushes 1 to the top of the stack if successful, and 0 otherwise.
      • OP 0x06 Ok - Stops script execution and returns the Ok code. Equivalent to pushing 1 to the stack then calling OP_Return.
      • OP 0x07 ChainId - Pushes the current chain_id onto the stack
      • OP 0x08 ChainHeight - Pushes the current chain_height onto the stack
      • OP 0x09 ChainTimestamp - Pushes the current timestamp of the chain onto the stack as a Signed64
      • OP 0x0a Pi - Pushes pi to the top of the stack as a Decimal.
      • OP 0x0b PrevBlockHash - Pushes the previous block hash onto the stack as a Hash256
      • OP 0x0c NetworkName - Pushes the network name as a Unsigned8Array to the top of the stack.
      • OP 0x0d RandomHash160Var - Pushes a random Hash160 onto the stack
      • OP 0x0e RandomHash256Var - Pushes a random Hash256 onto the stack
      • OP 0x0f RandomHash512Var - Pushes a random Hash512 onto the stack
      • OP 0x10 RandomUnsigned8Var - Pushes a random Unsigned8 onto the stack
      • OP 0x11 RandomUnsigned16Var - Pushes a random Unsigned16 onto the stack
      • OP 0x12 RandomUnsigned32Var - Pushes a random Unsigned32 onto the stack
      • OP 0x13 RandomUnsigned64Var - Pushes a random Unsigned64 onto the stack
      • OP 0x14 RandomUnsigned128Var - Pushes a random Unsigned128 onto the stack
      • OP 0x15 RandomSigned8Var - Pushes a random Signed8 onto the stack
      • OP 0x16 RandomSigned16Var - Pushes a random Signed16 onto the stack
      • OP 0x17 RandomSigned32Var - Pushes a random Signed32 onto the stack
      • OP 0x18 RandomSigned64Var - Pushes a random Signed64 onto the stack
      • OP 0x19 RandomSigned128Var - Pushes a random Signed128 onto the stack
      • OP 0x1a RandomFloat32Var - Pushes a random Float32 onto the stack
      • OP 0x1b RandomFloat64Var - Pushes a random Float64 onto the stack
      • OP 0x1c RandomDecimalVar - Pushes a random Decimal onto the stack
      • OP 0x1d Floor - Returns the largest integer less than or equal to the float/decimal.
      • OP 0x1e Ceil - Returns the smallest integer less than or equal to the float/decimal.
      • OP 0x1f IsNaN - Pushes 1 to the top of the stack if the float is NaN. Otherwise pushes 0.
      • OP 0x20 IsInfinite - Pushes 1 to the top of the stack if the float is infinite. Otherwise pushes 0.
      • OP 0x21 Ln - Pops a term from the top of the stack, performs the natural logarithm, and pushes it back on the stack.
      • OP 0x22 Exp - Pops a term from the top of the stack, performs e^x and pushes the term to the top of the stack.
      • OP 0x23 Hash160Var - Pushes a Hash160 onto the stack
      • OP 0x24 Hash256Var - Pushes a Hash256 onto the stack
      • OP 0x25 Hash512Var - Pushes a Hash512 onto the stack
      • OP 0x26 Unsigned8Var - Pushes an Unsigned8 onto the stack
      • OP 0x27 Unsigned16Var - Pushes an Unsigned16 onto the stack
      • OP 0x28 Unsigned32Var - Pushes an Unsigned32 onto the stack
      • OP 0x29 Unsigned64Var - Pushes an Unsigned64 onto the stack
      • OP 0x2a Unsigned128Var - Pushes an Unsigned128 onto the stack
      • OP 0x2b UnsignedBigVar - Pushes an UnsignedBig onto the stack
      • OP 0x2c Signed8Var - Pushes a Signed8 onto the stack
      • OP 0x2d Signed16Var - Pushes a Signed16 onto the stack
      • OP 0x2e Signed32Var - Pushes a Signed32 onto the stack
      • OP 0x2f Signed64Var - Pushes a Signed64 onto the stack
      • OP 0x30 Signed128Var - Pushes a Signed128 onto the stack
      • OP 0x31 SignedBigVar - Pushes a SignedBig onto the stack
      • OP 0x32 Float32Var - Pushes a Float32 onto the stack
      • OP 0x33 Float64Var - Pushes a Float64 onto the stack
      • OP 0x34 DecimalVar - Pushes a Decimal onto the stack
      • OP 0x35 Hash160ArrayVar - Pushes a Hash160Array onto the stack
      • OP 0x36 Hash256ArrayVar - Pushes a Hash256Array onto the stack
      • OP 0x37 Hash512ArrayVar - Pushes a Hash512Array onto the stack
      • OP 0x38 Unsigned8ArrayVar - Pushes a Unsigned8Array onto the stack
      • OP 0x39 Unsigned16ArrayVar - Pushes a Unsigned16Array onto the stack
      • OP 0x3a Unsigned32ArrayVar - Pushes a Unsigned32Array onto the stack
      • OP 0x3b Unsigned64ArrayVar - Pushes a Unsigned64 onto the stack
      • OP 0x3c Unsigned128ArrayVar - Pushes a Unsigned128Array onto the stack
      • OP 0x3d UnsignedBigArrayVar - Pushes a UnsignedBigArray onto the stack
      • OP 0x3e Signed8ArrayVar - Pushes a Signed8Array onto the stack
      • OP 0x3f Signed16ArrayVar - Pushes a Signed16Array onto the stack
      • OP 0x40 Signed32ArrayVar - Pushes a Signed32Array onto the stack
      • OP 0x41 Signed64ArrayVar - Pushes a Signed64Array onto the stack
      • OP 0x42 Signed128ArrayVar - Pushes a Signed128Array onto the stack
      • OP 0x43 SignedBigArrayVar - Pushes a SignedBigArray onto the stack
      • OP 0x44 Float32ArrayVar - Pushes a Float32Array onto the stack
      • OP 0x45 Float64ArrayVar - Pushes a Float64Array onto the stack
      • OP 0x46 DecimalArrayVar - Pushes a DecimalArray onto the stack
      • OP 0x47 GetAtArray - Duplicates the element at index in array and pushes it on top of the stack
      • OP 0x48 PushBackArray - Pushes the second item on the stack to the back of the array which is the first item on the stack
      • OP 0x49 PushFrontArray - Pushes the second item on the stack to the front of the array which is the first item on the stack
      • OP 0x4a ArrayLen - Pushes on top of the stack the len of the array currently on top of the stack
      • OP 0x4b GetType - Pushes on top of the stack the type code of the value currently on top of the stack as a Unsigned8
      • OP 0x4c PopBackArray - Pops the last item in the given array and pushes it to the top of the stack
      • OP 0x4d PopFrontArray - Pops the first item in the given array and pushes it to the top of the stack
      • OP 0x4e DeleteAtArray - Deletes the element at index in array and pushes it on top of the stack
      • OP 0x4f ClearStack - Clears the stack
      • OP 0x50 Add - Pops the two topmost items on the stack, performs addition and pushes the result on the stack
      • OP 0x51 Sub - Pops the two topmost items on the stack, performs subtraction and pushes the result on the stack
      • OP 0x52 Mult - Pops the two topmost items on the stack, performs multiplication and pushes the result on the stack
      • OP 0x53 Div - Pops the two topmost items on the stack, performs division and pushes the result on the stack
      • OP 0x54 BitSHLeft - Pops the two topmost items on the stack, performs a left bit shift operation on the first operand and then pushes the result on the stack
      • OP 0x55 BitSHRight - Pops the two topmost items on the stack, performs a right bit shift operation on the first operand and then pushes the result on the stack
      • OP 0x56 BitXOR - Pops the two topmost items on the stack, performs bit exclusive OR on the operands and then pushes the result on the stack
      • OP 0x57 Loop - Starts a loop block
      • OP 0x58 Break - Breaks the current loop
      • OP 0x59 BreakIf - Breaks the current loop if the topmost item on the stack is 1
      • OP 0x5a BreakIfn - Breaks the current loop if the topmost item on the stack is not equal to 1
      • OP 0x5b BreakIfEq - Breaks the current loop if the two topmost items on the stack are equal
      • OP 0x5c BreakIfNeq - Breaks the current loop if the two topmost items on the stack are not equal
      • OP 0x5d BreakIfLeq - Breaks the current loop if the topmost item on the stack is less or equal than the second
      • OP 0x5e BreakIfGeq - Breaks the current loop if the topmost item on the stack is greater or equal than the second
      • OP 0x5f BreakIfLt - Breaks the current loop if the topmost item on the stack is less than the second
      • OP 0x60 BreakIfGt - Breaks the current loop if the topmost item on the stack is greater than the second
      • OP 0x61 Continue - Moves to the next iteration of the current loop
      • OP 0x62 ContinueIf - Moves to the next iteration of the current loop if the topmost item on the stack is equal to 1
      • OP 0x63 ContinueIfn - Moves to the next iteration of the current loop if the topmost item on the stack is not equal to 1
      • OP 0x64 ContinueIfEq - Moves to the next iteration of the current loop if the two topmost items on the stack are equal
      • OP 0x65 ContinueIfNeq - Moves to the next iteration of the current loop if the two topmost items on the stack are not equal
      • OP 0x66 ContinueIfLeq - Moves to the next iteration of the current loop if the topmost item on the stack is less or equal than the second
      • OP 0x67 ContinueIfGeq - Moves to the next iteration of the current loop if the topmost item on the stack is greater or equal than the second
      • OP 0x68 ContinueIfLt - Moves to the next iteration of the current loop if the topmost item on the stack is less than the second
      • OP 0x69 ContinueIfGt - Moves to the next iteration of the current loop if the topmost item on the stack is greater than the second
      • OP 0x6a Depth - Pushes the depth of the current frame onto the stack as an Unsigned16
      • OP 0x6b Factorial - Pops the topmost item from the stack and performs a factorial operation on it.
      • OP 0x6c Drop - Removes the topmost item on the stack
      • OP 0x6d Dup - Duplicates the topmost item on the stack
      • OP 0x6e Nip - Removes the second item on the stack
      • OP 0x6f Over - Duplicates the second item on the stack
      • OP 0x70 Pick - Duplicates the nth item on the stack
      • OP 0x71 Roll - The nth item on the stack is moved to the top
      • OP 0x72 Rot - The three topmost items on the stack are rotated to the left
      • OP 0x73 Swap - The two topmost items on the stack are swapped
      • OP 0x74 Tuck - The topmost item on the stack is copied and inserted before the second-to-top item
      • OP 0x75 Drop2 - Removes the first two topmost items on the stack
      • OP 0x76 Dup2 - Duplicates the first two topmost items on the stack
      • OP 0x77 Dup3 - Duplicates the first three topmost items on the stack
      • OP 0x78 Over2 - Duplicates the third and fourth items on the stack
      • OP 0x79 Rot2 - The fifth and sixth topmost items on the stack are moved to the top
      • OP 0x7a Swap2 - Swaps the topmost pairs of terms on top of the stack
      • OP 0x7b Size - Pushes the size in bytes of the topmost item on the stack
      • OP 0x7c Substr - Splits the given array at position n and pushes both arrays to the top of the stack
      • OP 0x7d BitAND - Pops the two topmost items on the stack, performs bit AND on the operands and then pushes the result on the stack
      • OP 0x7e BitOR - Pops the two topmost items on the stack, performs bit OR on the operands and then pushes the result on the stack
      • OP 0x7f BitInvert - Inverts all bits of the topmost item on the stack
      • OP 0x80 DupAll - Duplicates the whole stack
      • OP 0x81 IsUTF8 - Pushes 1 on top of the stack if the given Unsigned8Array is a valid UTF8 byte sequence
      • OP 0x82 Add1 - Adds 1 to the topmost item on the stack
      • OP 0x83 Sub1 - Subtracts 1 from the topmost item on the stack
      • OP 0x84 Min - Returns the minimum of the two topmost items on the stack
      • OP 0x85 Max - Returns the maximum of the two topmost items on the stack
      • OP 0x86 Within - Pushes 1 on top of the stack if the topmost item on the stack is between the second and the third, 0 otherwise
      • OP 0x87 BoolAnd - And control operator
      • OP 0x88 BoolOr - Or control operator
      • OP 0x89 Negate - If the topmost item on the stack is 1, turns it into a 0. If the topmost item on the stack is anything but 1 it turns it into a 1
      • OP 0x8a Abs - Returns the absolute value of the topmost item on the stack
      • OP 0x8b Pow - Raises the second item popped from the stack to the power of the first item popped from the stack.
      • OP 0x8c Rem - Returns the remainder of the division of the first item popped from the stack with the second item popped from the stack.
      • OP 0x8d Round - Rounds the second item popped from the stack to the number decimal points which is the first item popped from the stack.
      • OP 0x8e PushExecCount - Pushes the current amount of opcodes that have been executed to the top of the stack.
      • OP 0x8f FlushToScriptOuts - Flushes the terms on the current frame to the script outputs stack
      • OP 0x90 PopToScriptOuts - Pops the topmost item on the stack and pushes it to the script outputs stack
      • OP 0x91 PickToScriptOuts - Duplicates the nth item on the stack and pushes it to the script outputs stack
      • OP 0x92 TrapIf - Traps if
      • OP 0x93 TrapIfEq - Traps if the two topmost items on the stack are equal
      • OP 0x94 TrapIfNeq - Traps if the two topmost items onf the stack are not equal
      • OP 0x95 TrapIfLeq - Traps if the first item on the stack is less than or equal than the second
      • OP 0x96 TrapIfGeq - Traps if the first item on the stack is greater or equal than the second
      • OP 0x97 TrapIfLt - Traps if the first item on the stack less than the second
      • OP 0x98 TrapIfGt - Traps if the first item on the stack is greater than the second
      • OP 0x99 TrapIfNeqType - Pops the first item on the stack and traps if its type not equal to the given type id
      • OP 0x9a ToHex - Converts the topmost item on the stack to hexadecimal
      • OP 0x9b FromHex - Parses the topmost item on the stack from hexadecimal
      • OP 0x9c InputsLen - Pushes the number of inputs in the current transaction to the top of the stack
      • OP 0x9d OutputsLen - Pushes the number of outputs currently generated by the transaction to the top of the stack
      • OP 0x9e PeekArray - Duplicates the last element of the given array and pushes it to the top of the stack.
      • OP 0x9f ClearArray - Removes all elements of the given array.
      • OP 0xa0 VerifyEd25519 - Takes the given public key and signature, and pushes them along with the current input's binary format to the Ed25519 signature verification stack and stops script execution.
      • OP 0xa1 VerifyEd25519Inline - Takes the given public key, signature, and message and verifies with Ed25519. Pushes 1 on top of the stack if verification is successful.
      • OP 0xa2 VerifyEcdsa - Takes the given public key, signature, and the binary format of the current output, verifies and stops script execution. Can be used for compatibility with Bitcoin/Ethereum or any other blockchain using ECDSA.
      • OP 0xa3 VerifyEcdsaInline - Takes the given public key, signature, and message and verifies with ecdsa. Pushes 1 on top of the stack if verification is successful.
      • OP 0xa4 VerifyBIP340 - Takes the given public key and signature, and pushes them along with the current input's binary format to the BIP340 signature verification stack and stops script execution. For direct compatibility with Bitcoin Taproot keys.
      • OP 0xa5 VerifyBIP340Inline - Takes the given public key, signature, and message and verifies according to BIP340. Pushes 1 on top of the stack if verification is successful. For direct compatibility with Bitcoin Taproot.
      • OP 0xa6 GetOutAmount - Receives and index and pushes the amount of the output at the given index on the output stack to the top of the stack
      • OP 0xa7 GetOutReceiver - Receives and index and pushes the address of the receiver at the given index on the output stack to the top of the stack. Pushes 0 of the output does not have a receiver address. If the output is coloured, pushes a coloured address.
      • OP 0xa8 GetOutScriptHash - Receives and index and pushes the script hash of the output at the given index on the output stack to the top of the stack.
      • OP 0xa9 GetOutScriptOutsLen - Pushes the number of script outs the output at the given index has on top of the stack.
      • OP 0xaa GetOutScriptOut - Receives two indexes. Pushes the script output at the second given index of the output at the first given index to the output stack.
      • OP 0xab SpillScriptOuts - Pushes all the script outputs of the output with the given index to the stack.
      • OP 0xac IsColouredOut - Receives and index and pushes 1 on top of the stack if the output is coloured, 0 otherwise.
      • OP 0xad ColourHash - Pushes to the top of the stack the colour hash of the output at the given index. Pushes a zero hash if the output is an XPU output.
      • OP 0xae CallBody - Parses the top Unsigned8Array on the stack as a script, and if successful executes it. Pops from the top of the stack the number of terms the script specifies. Traps if the script doesn't have enough terms on the top of the stack to take.
      • OP 0xaf Call - Calls the function with the given index.
      • OP 0xb0 Concat - Concat the two topmost items on the stack
      • OP 0xb1 Eq - Pushes 1 on top of the stack if the two topmost items on the stack are equal
      • OP 0xb2 Neq - Pushes 1 on top of the stack if the two topmost items on the stack are not equal
      • OP 0xb3 If - If control operator
      • OP 0xb4 Ifn - If not control operator
      • OP 0xb5 Else - Else control operator
      • OP 0xb6 End - Ends the current block
      • OP 0xb7 Verify - Pushes the current output's binary format to the signature verification stack and stops script execution
      • OP 0xb8 ReturnFunc - Returns from the current function and moves the terms on the current frame to the parent frame. Behaves the same as Return if called from the main function
      • OP 0xb9 Return - Stops script execution and succeeds if the topmost item on the stack is 1
      • OP 0xba EqVerify - Pushes the current output's binary format to the signature verification stack and stops script execution if the two topmost items on the stack are equal
      • OP 0xbb Lt - Pushes 1 on top of the stack if the topmost item on the stack is less than the second item on stack
      • OP 0xbc Gt - Pushes 1 on top of the stack if the topmost item on the stack is greater than the second item on stack
      • OP 0xbd Leq - Pushes 1 on top of the stack if the topmost item on the stack is less or equal than the second item on stack
      • OP 0xbe Geq - Pushes 1 on top of the stack if the topmost item on the stack is greater or equal than the second item on stack
      • OP 0xbf IfLt - If less than control operator
      • OP 0xc0 IfGt - If greater than control operator
      • OP 0xc1 IfLeq - If less or equal control operator
      • OP 0xc2 IfGeq - If greater or equal control operator
      • OP 0xc3 IfEq - If equal control operator
      • OP 0xc4 IfNeq - If not equal control operator
      • OP 0xc5 LtVerify - Pushes the current output's binary format to the signature verification stack and stops script execution if the topmost item on the stack is less than the second item on the stack
      • OP 0xc6 GtVerify - Pushes the current output's binary format to the signature verification stack and stops script execution if the topmost item on the stack is greater than the second item on the stack
      • OP 0xc7 LeqVerify - Pushes the current output's binary format to the signature verification stack and stops script execution if the topmost item on the stack is less or equal than the second item on the stack
      • OP 0xc8 GeqVerify - Pushes the current output's binary format to the signature verification stack and stops script execution if the topmost item on the stack is greater or equal than the second item on the stack
      • OP 0xc9 NeqVerify - Pushes the current output's binary format to the signature verification stack and stops script execution if the two topmost items on the stack are not equal
      • OP 0xca CastTo - Casts the topmost item on the stack to the type id which is the second item on the stack
      • OP 0xcb InputScriptArgsLen - Pushes the number of script args of the input at the given index to the top of the stack
      • OP 0xcc GetInputScriptArgAt - Pushes the script argument at the second given index of the input at the first given index to the top of the stack
      • OP 0xcd SpillInputScriptArgs - Pushes all the script args of the input at the given index to the top of the stack.
      • OP 0xce Sqrt - Pops a term from the top of the stack, performs sqrt and pushes it back to the top of the stack.
      • OP 0xcf Zero - Pushes zero as an Unsigned8 to the top of the stack.
      • OP 0xd0 One - Pushes one as an Unsigned8 to the top of the stack.
      • OP 0xd1 ZeroOfType - Receives a type id of a primitive and pushes zero of that type to the top of the stack.
      • OP 0xd2 OneOfType - Receives a type id of a primitive and pushes one of that type to the top of the stack.
      • OP 0xd3 PushOut - Pushes a new output to the output stack. The following arguments are popped from the stack: out_amount = Signed128, out_address = Hash160, out_script_hash = Hash160
      • OP 0xd4 PushOutVerify - Pushes a new output to the output stack and calls Verify. The following arguments are popped from the stack: out_amount = Signed128, out_address = Hash160, out_script_hash = Hash160
      • OP 0xd5 PushOutIf - Pushes a new output to the output stack if the first item on the stack is equal to 1. The following arguments are popped from the stack: condition = <any_integer_type>, out_amount = Signed128, out_address = Hash160, out_script_hash = Hash160
      • OP 0xd6 PushOutIfEq - Pushes a new output to the output stack if the topmost items on the stack are equal. The following arguments are popped from the stack: value1 = <any_type>, value2 = <any_type>, out_amount = Signed128, out_address = Hash160, out_script_hash = Hash160
      • OP 0xd7 PushOutIfNeq - Pushes a new output to the output stack if the topmost items on the stack are not equal. The following arguments are popped from the stack: value1 = <any_type>, value2 = <any_type>, out_amount = Signed128, out_address = Hash160, out_script_hash = Hash160
      • OP 0xd8 PushOutIfLt - Pushes a new output to the output stack if the topmost item on the stack is less than the second item on the stack. The following arguments are popped from the stack: value1 = <any_type>, value2 = <any_type>, out_amount = Signed128, out_address = Hash160, out_script_hash = Hash160
      • OP 0xd9 PushOutIfGt - Pushes a new output to the output stack if the topmost item on the stack is greater than the second item on the stack. The following arguments are popped from the stack: value1 = <any_type>, value2 = <any_type>, out_amount = Signed128, out_address = Hash160, out_script_hash = Hash160
      • OP 0xda PushOutIfLeq - Pushes a new output to the output stack if the topmost item on the stack is less or equal than the second item on the stack. The following arguments are popped from the stack: value1 = <any_type>, value2 = <any_type>, out_amount = Signed128, out_address = Hash160, out_script_hash = Hash160
      • OP 0xdb PushOutIfGeq - Pushes a new output to the output stack if the topmost item on the stack is greater or equal than the second item on the stack. The following arguments are popped from the stack: value1 = <any_type>, value2 = <any_type>, out_amount = Signed128, out_address = Hash160, out_script_hash = Hash160
      • OP 0xdc GetSpentOutAmount - Pushes the amount of the spent output to the top of the stack
      • OP 0xde GetSpentOutReceiver - Pushes the address of the receiver of the spent output to the top of the stack. Pushes 0 if the output does not have a receiver address. If the output is coloured, pushes a coloured address.
      • OP 0xdf GetSpentOutScriptHash - Pushes the script hash of the spent output to the top of the stack.
      • OP 0xe0 GetSpentOutScriptOutsLen - Pushes the number of script outs the spent output has on top of the stack.
      • OP 0xe1 GetSpentOutScriptOut - Pushes the script output of the spent output at the given index to the top of stack.
      • OP 0xe2 SpillSpentOutScriptOuts - Pushes all the script outputs of the spent output to the top of the stack.
      • OP 0xe3 SpentOutIsColouredOut - Pushes 1 if the spent output is coloured and 0 otherwise.
      • OP 0xe4 CurrentColourHash - Pushes the colour hash of the spent out to the top of the stack. Pushes a zero hash if the output is an XPU output. Pushes the colour hash if it is a coloured coinbase.
      • OP 0xe5 PushPrevScriptOuts - Pushes previous spend script outs on top of the stack up to n
      • OP 0xe6 Trunc - Returns the integer part of a float/decimal.
      • OP 0xe7 Frac - Returns the fractionary part of a float/decimal.
      • OP 0xe8 GhostRider256 - Pops the topmost item on the stack, hashes it with GhostRider and then pushes the result to the stack.
      • OP 0xe9 Fugue256 - Pops the topmost item on the stack, hashes it with Fugue256 and then pushes the result to the stack.
      • OP 0xea JH256 - Pops the topmost item on the stack, hashes it with JH256 and then pushes the result to the stack.
      • OP 0xeb Blake2s256 - Pops the topmost item on the stack, hashes it with Blake2s256 and then pushes the result to the stack.
      • OP 0xec Trap - Breaks script execution and returns an implicit error.
      • OP 0xed Sha256 - Pops the topmost item on the stack, hashes it with Sha256 and then pushes the result to the stack.
      • OP 0xee Sha512 - Pops the topmost item on the stack, hashes it with Sha512 and then pushes the result to the stack.
      • OP 0xef Keccak256 - Pops the topmost item on the stack, hashes it with Keccak256 and then pushes the result to the stack.
      • OP 0xf0 Keccak512 - Pops the topmost item on the stack, hashes it with Keccak512 and then pushes the result to the stack.
      • OP 0xf1 Blake2b256 - Pops the topmost item on the stack, hashes it with Blake2b256 and then pushes the result to the stack.
      • OP 0xf2 Blake2b512 - Pops the topmost item on the stack, hashes it with Blake2b512 and then pushes the result to the stack.
      • OP 0xf3 Blake3_160 - Pops the topmost item on the stack, hashes it with Blake3_160 and then pushes the result to the stack.
      • OP 0xf4 Blake3_256 - Pops the topmost item on the stack, hashes it with Blake3_256 and then pushes the result to the stack.
      • OP 0xf5 Blake3_512 - Pops the topmost item on the stack, hashes it with Blake3_512 and then
      • OP 0xf6 Blake3_256_160 - Pops the topmost item on the stack, hashes it with Blake3_256, then hashes the resulting hash with Blake3_160 and then pushes the result to the stack.
      • OP 0xf7 Blake3_256Keyed - Pops the following from the stack: value_to_hash = <any_type>, key = Unsigned8Array and hashes the value it with Blake3_256 keyed and then pushes the result to the stack.
      • OP 0xf8 Blake3_512Keyed - Pops the following from the stack: value_to_hash = <any_type>, key = Unsigned8Array and hashes the value it with Blake3_512 keyed and then pushes the result to the stack.
      • OP 0xf9 Blake3_160Keyed - Pops the following from the stack: value_to_hash = <any_type>, key = Unsigned8Array and hashes the value it with Blake3_160 keyed and then pushes the result to the stack.
      • OP 0xfa Blake3_160Internal - Pops the topmost item on the stack, hashes it with Blake3_160 keyed with the current shard key, and then pushes the result to the stack.
      • OP 0xfb Blake3_256Internal - Pops the topmost item on the stack, hashes it with Blake3_256 keyed with the current shard key, and then pushes the result to the stack.
      • OP 0xfc Blake3_512Internal - Pops the topmost item on the stack, hashes it with Blake3_512 keyed with the current shard key, and then pushes the result to the stack.
      • OP 0xfd Blake3_256_160Internal - Pops the topmost item on the stack, hashes it with Blake3_256 keyed with the current shard key, and then pushes the result to the stack.
      • OP 0xfe Ripemd160 - Pops the topmost item on the stack, hashes it with Ripemd_160 and then pushes the result to the stack.
      • OP 0xff Nop - Does nothing
  • Network layer

    • Sector networking
      • Seed nodes DNS resolution
      • Header synchronization
      • Peer discovery via Kademlia DHT
      • Implement base header propagation
      • Implement graphene propagation
    • Public Bridge DHT
      • Query outputs via Kademlia
      • Query headers via Kademlia
    • Private Bridge protocol
      • Query private bridges
      • Import private bridges from certificates
    • Cluster mode
      • Clustered block validation consensus
        • AP mode
        • CP mode
        • Hybrid CP mode in the same datacenter but AP across datacenters
      • Shard distribution on a hash ring
      • Shard re-distribution on the hash ring when adding/removing nodes
      • Shard simple replication
      • Shard datacenter replication
      • UTXO/Witness set simple replication
      • UTXO/Witness set datacenter replication
      • Wallet simple replication
      • Wallet datacenter replication
    • Asset Exchange
      • Quote mempool
      • Asset exchange peer discovery via Kademlia DHT
  • Node

    • RPC
      • RPC over HTTP/JSON
      • RPC over WS/JSON
      • RPC over WS/Binary
      • RPC over TCP/JSON
      • RPC over TCP/Binary
      • RPC Commands
        • GetBlockchainInfo
        • GetBlockHash
        • GetBlockStats
        • GetSectorHeight
        • GetShardHeight
        • GetSectorInfo
        • GetShardInfo
        • GetMempoolInfo
        • GetRawMempoolShard
        • GetRawMempool
        • PreciousBlock
        • PruneShard
        • Generate
        • GenerateToDescriptor
        • GenerateToAddress
        • GenerateShare
        • GenerateShareToDescriptor
        • GenerateShareToAddress
        • SubmitBlock
        • SubmitShareBlock
        • GetNetworkInfo
        • GetPeerInfo
        • GetConnectionCount
        • AddNode
        • ListBanned
        • SetNetworkActive
        • GetNodeInfo
        • Stop
        • Uptime
        • ValidateAddress
        • SignMessage
        • VerifyMessage
        • VerifyAddress
        • GenerateWallet
        • BackupWallet
        • BackupWalletS3
        • SendRawTx
        • QueryOutput
    • Mempool
      • Base Implementation
      • Sharded mempool
  • Wallet

    • Hierarchical Deterministic Wallet
    • Multi-Sig Hierarchical Deterministic Wallet
    • Backup wallet
    • Backup wallet to AWS S3
    • Backup wallet to Google Cloud Storage
    • Restore wallet from file
    • Restore wallet from AWS S3
    • Restore wallet from Google Cloud Storage
  • GUI

    • Onboarding screen
    • Render XPU balances
    • Render XPU transaction history
    • Render alternative asset balances
    • Render alternative asset transaction histories
    • Render wallet addresses
    • Create wallet
    • Import wallet
      • Import wallet from encrypted private key with secure window to enter the decryption key
      • Import wallet from unencrypted private key with secure window
      • Import wallet from file
    • Create new wallet address
      • Render address as QR Code
    • Send interface
      • Send via QR Code
    • Receive interface
      • Receive via QR Code
    • Multi-Sig interface
    • Asset exchange interface
      • Price chart
      • Trading interface
      • Market orders
      • Limit orders