use of org.aion.base.db.RepositoryCache in project aion by aionnetwork.
the class SolidityTypeTest method testDynamicArray2.
@Test
public void testDynamicArray2() throws Exception {
List<byte[]> x = new ArrayList<>();
x.add(Hex.decode("1122334455667788112233445566778811223344"));
x.add(Hex.decode("2122334455667788112233445566778811223344"));
x.add(Hex.decode("3122334455667788112233445566778811223344"));
SolidityType type = new DynamicArrayType("bytes20[]");
byte[] params = ByteUtil.merge(Hex.decode("00000000000000000000000000000010"), type.encode(x));
System.out.println(Hex.toHexString(params));
AionTransaction tx = createTransaction(ByteUtil.merge(Hex.decode("97c3b2db"), params));
MiningBlock block = createDummyBlock();
RepositoryCache repo = createRepository(tx);
AionTxReceipt receipt = executeTransaction(tx, block, repo).getReceipt();
System.out.println(receipt);
assertArrayEquals(params, receipt.getTransactionOutput());
Object[] decoded = (Object[]) type.decode(receipt.getTransactionOutput(), 16);
for (Object d : decoded) {
System.out.println(d);
}
}
use of org.aion.base.db.RepositoryCache in project aion by aionnetwork.
the class SolidityTypeTest method testString2.
@Test
public void testString2() throws Exception {
String x = "hello, world!hello, world!hello, world!hello, world!hello, world!hello, world!";
SolidityType type = new StringType();
byte[] params = ByteUtil.merge(Hex.decode("00000000000000000000000000000010"), type.encode(x));
System.out.println(Hex.toHexString(params));
AionTransaction tx = createTransaction(ByteUtil.merge(Hex.decode("61cb5a01"), params));
MiningBlock block = createDummyBlock();
RepositoryCache repo = createRepository(tx);
AionTxReceipt receipt = executeTransaction(tx, block, repo).getReceipt();
System.out.println(receipt);
assertArrayEquals(params, receipt.getTransactionOutput());
assertEquals(x, type.decode(receipt.getTransactionOutput(), 16));
}
use of org.aion.base.db.RepositoryCache in project aion by aionnetwork.
the class SolidityTypeTest method testString1.
@Test
public void testString1() throws Exception {
String x = "hello, world!";
SolidityType type = new StringType();
byte[] params = ByteUtil.merge(Hex.decode("00000000000000000000000000000010"), type.encode(x));
System.out.println(Hex.toHexString(params));
AionTransaction tx = createTransaction(ByteUtil.merge(Hex.decode("61cb5a01"), params));
MiningBlock block = createDummyBlock();
RepositoryCache repo = createRepository(tx);
AionTxReceipt receipt = executeTransaction(tx, block, repo).getReceipt();
System.out.println(receipt);
assertArrayEquals(params, receipt.getTransactionOutput());
assertEquals(x, type.decode(receipt.getTransactionOutput(), 16));
}
use of org.aion.base.db.RepositoryCache in project aion by aionnetwork.
the class SolidityTypeTest method createRepository.
private RepositoryCache createRepository(AionTransaction tx) throws IOException {
Result r = Compiler.getInstance().compile(ContractUtils.readContract("SolidityType.sol"), Options.BIN);
CompilationResult cr = CompilationResult.parse(r.output);
String deployer = cr.contracts.get("SolidityType").bin;
String contract = deployer.substring(deployer.indexOf("60506040", 1));
AionRepositoryImpl repo = blockchain.getRepository();
RepositoryCache track = repo.startTracking();
track.addBalance(tx.getSenderAddress(), BigInteger.valueOf(tx.getEnergyPrice()).multiply(BigInteger.valueOf(500_000L)));
track.createAccount(tx.getDestinationAddress());
track.saveCode(tx.getDestinationAddress(), Hex.decode(contract));
track.saveVmType(tx.getDestinationAddress(), InternalVmType.FVM);
track.flushTo(repo, true);
return track;
}
use of org.aion.base.db.RepositoryCache in project aion by aionnetwork.
the class SolidityTypeTest method testFixedBytes2.
@Test
public void testFixedBytes2() throws Exception {
byte[] x = Hex.decode("1122334455667788112233445566778811223344");
SolidityType type = new Bytes32Type("bytes20");
byte[] params = type.encode(x);
System.out.println(Hex.toHexString(params));
AionTransaction tx = createTransaction(ByteUtil.merge(Hex.decode("877b277f"), params));
MiningBlock block = createDummyBlock();
RepositoryCache repo = createRepository(tx);
AionTxReceipt receipt = executeTransaction(tx, block, repo).getReceipt();
System.out.println(receipt);
assertArrayEquals(params, receipt.getTransactionOutput());
assertArrayEquals(x, (byte[]) type.decode(receipt.getTransactionOutput()));
}
Aggregations