Skip to content

Commit

Permalink
chore: replace RLP.sol with RLPReader.sol
Browse files Browse the repository at this point in the history
  • Loading branch information
kevsul committed Oct 9, 2019
1 parent 7d7fa9c commit cc1167a
Show file tree
Hide file tree
Showing 11 changed files with 616 additions and 637 deletions.
20 changes: 10 additions & 10 deletions plasma_framework/contracts/mocks/python_tests_wrappers/RLPTest.sol
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
pragma solidity ^0.5.0;

import "../../src/utils/RLP.sol";
import "../../src/utils/RLPReader.sol";


/**
Expand All @@ -13,11 +13,11 @@ contract RLPTest {
view
returns (uint256, address, address)
{
RLP.RLPItem[] memory txList = RLP.toList(RLP.toRLPItem(tx_bytes));
RLPReader.RLPItem[] memory txList = RLPReader.toList(RLPReader.toRlpItem(tx_bytes));
return (
RLP.toUint(txList[5]),
RLP.toAddress(txList[6]),
RLP.toAddress(txList[7])
RLPReader.toUint(txList[5]),
RLPReader.toAddress(txList[6]),
RLPReader.toAddress(txList[7])
);
}

Expand All @@ -26,12 +26,12 @@ contract RLPTest {
view
returns (uint256, address, address, address)
{
RLP.RLPItem[] memory txList = RLP.toList(RLP.toRLPItem(tx_bytes));
RLPReader.RLPItem[] memory txList = RLPReader.toList(RLPReader.toRlpItem(tx_bytes));
return (
RLP.toUint(txList[7]),
RLP.toAddress(txList[8]),
RLP.toAddress(txList[9]),
RLP.toAddress(txList[10])
RLPReader.toUint(txList[7]),
RLPReader.toAddress(txList[8]),
RLPReader.toAddress(txList[9]),
RLPReader.toAddress(txList[10])
);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,15 +2,15 @@ pragma solidity 0.5.11;
pragma experimental ABIEncoderV2;

import "../../../src/transactions/outputs/PaymentOutputModel.sol";
import "../../../src/utils/RLP.sol";
import "../../../src/utils/RLPReader.sol";

contract PaymentOutputModelMock {
using PaymentOutputModel for PaymentOutputModel.Output;

using RLP for bytes;
using RLPReader for bytes;

function decode(bytes memory _output) public pure returns (PaymentOutputModel.Output memory) {
PaymentOutputModel.Output memory output = PaymentOutputModel.decode(_output.toRLPItem());
PaymentOutputModel.Output memory output = PaymentOutputModel.decode(_output.toRlpItem());
return output;
}

Expand Down
39 changes: 29 additions & 10 deletions plasma_framework/contracts/mocks/utils/RLPMock.sol
Original file line number Diff line number Diff line change
@@ -1,30 +1,49 @@
pragma solidity 0.5.11;

import "../../src/utils/RLP.sol";
pragma experimental ABIEncoderV2;

import "../../src/utils/RLPReader.sol";

contract RLPMock {

using RLP for bytes;
using RLP for RLP.RLPItem;
using RLPReader for bytes;
using RLPReader for RLPReader.RLPItem;

function decodeBytes32(bytes memory _data) public pure returns (bytes32) {
return _data.toRLPItem().toBytes32();
return bytes32(_data.toRlpItem().toUint());
}

function decodeBytes20(bytes memory _data) public pure returns (bytes20) {
return bytes20(_data.toRlpItem().toAddress());
}

function decodeBool(bytes memory _data) public pure returns (bool) {
return _data.toRLPItem().toBool();
return _data.toRlpItem().toBoolean();
}

function decodeInt(bytes memory _data) public pure returns (int) {
return _data.toRLPItem().toInt();
return int(_data.toRlpItem().toUint());
}

function decodeUint(bytes memory _data) public pure returns (uint) {
return _data.toRLPItem().toUint();
return _data.toRlpItem().toUint();
}

function decodeList(bytes memory _data) public pure returns (bytes[] memory) {
RLPReader.RLPItem[] memory items = _data.toRlpItem().toList();

bytes[] memory result = new bytes[](items.length);
for (uint i = 0; i < items.length; i++) {
result[i] = items[i].toRlpBytes();
}
return result;
}

function decodeString(bytes memory _data) public pure returns (string memory) {
return string(_data.toRlpItem().toBytes());
}

function decodeArray(bytes memory _data) public pure returns (uint) {
RLP.RLPItem[] memory items = (_data.toRLPItem().toList()[0]).toList();
return items.length;
function decodeBytes(bytes memory _data) public pure returns (bytes memory) {
return _data.toRlpItem().toBytes();
}
}
Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@
pragma solidity 0.5.11;

import "./outputs/PaymentOutputModel.sol";
import "../utils/RLP.sol";
import "../utils/RLPReader.sol";

/**
* @notice Data structure and its decode function for Payment transaction
*/
library PaymentTransactionModel {

using RLP for bytes;
using RLP for RLP.RLPItem;
using RLPReader for bytes;
using RLPReader for RLPReader.RLPItem;
using PaymentOutputModel for PaymentOutputModel.Output;

uint8 constant public MAX_INPUT_NUM = 4;
Expand All @@ -25,20 +25,20 @@ library PaymentTransactionModel {
}

function decode(bytes memory _tx) internal pure returns (PaymentTransactionModel.Transaction memory) {
RLP.RLPItem[] memory rlpTx = _tx.toRLPItem().toList();
RLPReader.RLPItem[] memory rlpTx = _tx.toRlpItem().toList();
require(rlpTx.length == ENCODED_LENGTH, "Invalid encoding of transaction");

RLP.RLPItem[] memory rlpInputs = rlpTx[1].toList();
RLPReader.RLPItem[] memory rlpInputs = rlpTx[1].toList();
require(rlpInputs.length <= MAX_INPUT_NUM, "Transaction inputs num exceeds limit");

RLP.RLPItem[] memory rlpOutputs = rlpTx[2].toList();
RLPReader.RLPItem[] memory rlpOutputs = rlpTx[2].toList();
require(rlpOutputs.length <= MAX_OUTPUT_NUM, "Transaction outputs num exceeds limit");

uint txType = rlpTx[0].toUint();

bytes32[] memory inputs = new bytes32[](rlpInputs.length);
for (uint i = 0; i < rlpInputs.length; i++) {
bytes32 input = rlpInputs[i].toBytes32();
bytes32 input = bytes32(rlpInputs[i].toUint());
inputs[i] = input;
}

Expand All @@ -48,7 +48,7 @@ library PaymentTransactionModel {
outputs[i] = output;
}

bytes32 metaData = rlpTx[3].toBytes32();
bytes32 metaData = bytes32(rlpTx[3].toUint());

return Transaction({txType: txType, inputs: inputs, outputs: outputs, metaData: metaData});
}
Expand Down
14 changes: 7 additions & 7 deletions plasma_framework/contracts/src/transactions/WireTransaction.sol
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
pragma solidity 0.5.11;

import "../utils/RLP.sol";
import "../utils/RLPReader.sol";

/**
* @title WireTransaction
Expand All @@ -10,8 +10,8 @@ import "../utils/RLP.sol";
*/
library WireTransaction {

using RLP for bytes;
using RLP for RLP.RLPItem;
using RLPReader for bytes;
using RLPReader for RLPReader.RLPItem;

struct Output {
uint256 outputType;
Expand All @@ -25,11 +25,11 @@ library WireTransaction {
* Outputs is a field on the second index and should be a list where first three elements are: amount, output guard, token.
*/
function getOutput(bytes memory transaction, uint16 outputIndex) internal pure returns (Output memory) {
RLP.RLPItem[] memory rlpTx = transaction.toRLPItem().toList();
RLP.RLPItem[] memory outputs = rlpTx[2].toList();
RLPReader.RLPItem[] memory rlpTx = transaction.toRlpItem().toList();
RLPReader.RLPItem[] memory outputs = rlpTx[2].toList();
require(outputIndex < outputs.length, "Invalid wire transaction format");

RLP.RLPItem[] memory output = outputs[outputIndex].toList();
RLPReader.RLPItem[] memory output = outputs[outputIndex].toList();
uint256 outputType = output[0].toUint();
bytes20 outputGuard = bytes20(output[1].toAddress());
address token = output[2].toAddress();
Expand All @@ -43,7 +43,7 @@ library WireTransaction {
* Transaction type is the value of first field in rlp encoded list.
*/
function getTransactionType(bytes memory transaction) internal pure returns (uint256) {
RLP.RLPItem[] memory rlpTx = transaction.toRLPItem().toList();
RLPReader.RLPItem[] memory rlpTx = transaction.toRlpItem().toList();
return rlpTx[0].toUint();
}
}
Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@
pragma solidity 0.5.11;
pragma experimental ABIEncoderV2;

import "../../utils/RLP.sol";
import "../../utils/RLPReader.sol";
import "../../utils/AddressPayable.sol";

/**
* @notice Data structure and its decode function for Payment output
*/
library PaymentOutputModel {

using RLP for RLP.RLPItem;
using RLPReader for RLPReader.RLPItem;

struct Output {
uint256 outputType;
Expand All @@ -28,13 +28,13 @@ library PaymentOutputModel {
return AddressPayable.convert(address(uint160(_output.outputGuard)));
}

function decode(RLP.RLPItem memory encoded) internal pure returns (Output memory) {
RLP.RLPItem[] memory rlpEncoded = encoded.toList();
function decode(RLPReader.RLPItem memory encoded) internal pure returns (Output memory) {
RLPReader.RLPItem[] memory rlpEncoded = encoded.toList();
require(rlpEncoded.length == 4, "Invalid output encoding");

Output memory output = Output({
outputType: rlpEncoded[0].toUint(),
outputGuard: rlpEncoded[1].toBytes20(),
outputGuard: bytes20(rlpEncoded[1].toAddress()),
token: rlpEncoded[2].toAddress(),
amount: rlpEncoded[3].toUint()
});
Expand Down

0 comments on commit cc1167a

Please sign in to comment.