Add docs for secp256k1 and instruction introspection. (#12369)

This commit is contained in:
sakridge 2020-09-21 13:50:23 -07:00 committed by GitHub
parent 6767264aa1
commit 7dd4de80eb
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 31 additions and 2 deletions

View File

@ -0,0 +1,28 @@
---
title: instruction introspection
---
## Problem
Some smart contract programs may want to verify that another Instruction is present in a
given Message since that Instruction could be be performing a verification of certain data,
in a precompiled function. (See secp256k1\_instruction for an example).
## Solution
Add a new sysvar Sysvar1nstructions1111111111111111111111111 that a program can reference
and received the Message's instruction data inside, and also the index of the current instruction.
Two helper functions to extract this data can be used:
```
fn load_current_index(instruction_data: &[u8]) -> u16;
fn load_instruction_at(instruction_index: usize, instruction_data: &[u8]) -> Result<Instruction>;
```
The runtime will recognize this special instruction, serialize the Message instruction data
for it and also write the current instruction index and then the bpf program can extract the
necessary information from there.
Note: custom serialization of instructions is used because bincode is about 10x slower
in native code and exceeds current BPF instruction limits.

View File

@ -57,8 +57,9 @@ Cost of the transaction will count the number of signatures to verify multiplied
## Optimization notes
The operation will have to take place after deserialization and accounts load assuming the transaction references external
accounts for the inputs. It should be relatively easy though to scan the transaction for introspection inputs.
The operation will have to take place after (at least partial) deserialization, but all inputs come
from the transaction data itself, this allows it to be relatively easy to execute in parallel to
transaction processing and PoH verification.
## Other solutions