X
. During the time A
some transaction that affects X
was published, e.g. split or merge transactions. X
が存在すると仮定し、期間 A
において、 X
に影響する何らかの transaction が発行されたとする。例えば、split や merge を行う transaction など。 B
transactions that affect segments different from A
was published. B
において、 A
とは異なる segment に影響する transaction が発行されたとする。 C
transaction that affects X
, was published, at that moment we want to check the history of that transaction is valid. C
において、 X
に影響する transaction が発行されたとする。このとき、我々は transaction 履歴の正当性を確認したい。 X
, and not the whole transaction history of plasma. X
のみに関係する transaction のみをカバーする proof を生成する必要がある。Plasma の transaction 履歴全体をカバーする必要はない。 txA
と txB
)が 2 つの segment を生成したときのシナリオを表している。 txA
は segment (0 - 1.75) を生成し、chunk (1 - 2) とマッチする txB
は segment (1.75 - 5) を生成し、chunk (3 - 4) と (5 - 6) とマッチする C
exit is valid, block observer only needs to check the history of the segment that matches to chunks (3 - 4) and (5 - 6). Proof of inclusion of range C
to mentioned chunks will include transactions that affect the same two chunks. C
の exit が正当であることを検証するためには、chunk (3 - 4) と (5 - 6) にマッチする segment の履歴を確認するだけでよい。 C
がこれらの chunk に含まれるという proof には、それらの chunk に影響する transaction が含まれる。struct Block {
BlockHeader header,
Transactions[] transactions
}
struct BlockHeader {
SumMerkleRoot sumMerkleRoot,
uint2048, RSAAccumulator,
RSAInclusionProof RSAChainProof
}
struct RSAInclusionProof {
uint2048 b,
uint256 r
}
struct Transaction {
TransactionContent content,
Signatures[] signatures
}
struct TransactionContent {
Input[] inputs,
Output[] outputs,
uint64 maxBlockIndex
}
struct Input
{
uint160 owner,
uint64 blockIndex,
uint32 txIndex,
uint8 outputIndex,
Segment amount
}
struct Output
{
uint160 owner,
Segment amount
}
struct Segment
{
uint256 begin
uint256 end
}
txIndex
values because it can be fragmented to different segments. txIndex
を含むことがある。node.length = left.length + right.length
node.hash = Hash(left.length, left.hash, right.length, right.hash)
TransactionContent
に対応する)未署名 transaction と bond を提出する1 bit for tx netto proof (must be zero for outputs, inputs, max_blockid and must be one for signatures)
5 bits for Merkle proof for outputs, inputs, and maxBlockId
3 bits for Merkle proof for signatures.
function withdrawal(Input point,
RSAInclusionProof proof) external payable returns (bool);
function withdrawalChallangeSpend(Input point,
Transaction tx, FullSumMerkleProof txProof, uint8 spendIndex,
RSAInclusionProof spendInclusionProof) external returns (bool);
function withdrawalChallangeBlock(
Input point, SumMerkleProof txProof,MerkleProof inputProof,
uint64 maxBlockIndex, MerkleProof maxBlockIndexProof
) external returns (bool);