{
  "tcID":"INT-VTM-013",
  "tcName":"MemoSize31KB",
  "test":[
    {
      "tx":{
        "type":"VALUE_TRANSFER_MEMO",
        "to":"0x18fd72128ae95d0c72dc1301db27371cb22cd004",
        "value":"0",
        "gas":10000000,
        "data":"// Copyright 2019 The caver-java Authors\n\n// Licensed under the Apache License, Version 2.0 (the “License”);\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n\n// http://www.apache.org/licenses/LICENSE-2.0\n\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an “AS IS” BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\npackage org.caverj.scenario;\n\nimport org.caverj.crpyto.*;\nimport org.caverj.tx.model.AccountCreationTransaction;\nimport org.caverj.methods.response.KlayTransactionReceipt;\nimport org.caverj.tx.account.AccountKey;\nimport org.caverj.tx.account.AccountKeyPublic;\nimport org.caverj.tx.account.AccountKeyRoleBased;\nimport org.caverj.tx.account.AccountKeyWeightedMultiSig;\nimport org.caverj.tx.manager.PollingTransactionReceiptProcessor;\nimport org.caverj.tx.manager.TransactionManager;\nimport org.caverj.utils.Convert;\nimport org.junit.Test;\nimport org.web3j.crypto.ECKeyPair;\nimport org.web3j.crypto.Keys;\n\nimport java.math.BigInteger;\nimport java.util.Arrays;\n\nimport static org.caverj.base.Accounts.BRANDON;\nimport static org.junit.Assert.assertEquals;\n\npublic class AccountKeyIT extends Scenario {\n\n    KlayCredentials credentials1, credentials2, credentials3;\n\n    @Test\n    public void AccountKeyRolebased() throws Exception {\n        KlayCredentials rolebased = KlayCredentials.create(Keys.createEcKeyPair());\n        TransactionManager transactionManager = new TransactionManager.Builder(caverj, BRANDON)\n                .setTransactionReceiptProcessor(new PollingTransactionReceiptProcessor(caverj, 1000, 15))\n                .build();\n        setUpAccount(transactionManager);\n\n        AccountCreationTransaction accountCreationTransaction = AccountCreationTransaction.create(\n                BRANDON.getAddress(),\n                rolebased.getAddress(),\n                Convert.toPeb(\"0.2\", Convert.Unit.KLAY).toBigInteger(),\n                GAS_LIMIT,\n                createRolebased()\n        );\n        KlayTransactionReceipt.TransactionReceipt transactionReceipt = transactionManager.executeTransaction(accountCreationTransaction);\n        assertEquals(\"0x1\", transactionReceipt.getStatus());\n    }\n\n    private AccountKey createRolebased() {\n        return AccountKeyRoleBased.create(\n                AccountKeyPublic.create(credentials1.getEcKeyPair().getPublicKey()),\n                AccountKeyPublic.create(credentials2.getEcKeyPair().getPublicKey()),\n                getRoleFeePayer()\n        );\n    }\n\n    private AccountKeyWeightedMultiSig getRoleFeePayer() {\n        return AccountKeyWeightedMultiSig.create(\n                BigInteger.valueOf(5),\n                Arrays.asList(\n                        AccountKeyWeightedMultiSig.WeightedPublicKey.create(\n                                BigInteger.valueOf(2),\n                                AccountKeyPublic.create(credentials1.getEcKeyPair().getPublicKey())\n                        ),\n                        AccountKeyWeightedMultiSig.WeightedPublicKey.create(\n                                BigInteger.valueOf(2),\n                                AccountKeyPublic.create(credentials2.getEcKeyPair().getPublicKey())\n                        ),\n                        AccountKeyWeightedMultiSig.WeightedPublicKey.create(\n                                BigInteger.valueOf(1),\n                                AccountKeyPublic.create(credentials3.getEcKeyPair().getPublicKey())\n                        )\n                )\n        );\n    }\n\n    private void setUpAccount(TransactionManager transactionManager) throws Exception {\n        ECKeyPair key1 = Keys.createEcKeyPair();\n        setUpCreateAccount(transactionManager, key1);\n        credentials1 = KlayCredentials.create(key1);\n\n        ECKeyPair key2 = Keys.createEcKeyPair();\n        setUpCreateAccount(transactionManager, key2);\n        credentials2 = KlayCredentials.create(key2);\n\n        ECKeyPair key3 = Keys.createEcKeyPair();\n        setUpCreateAccount(transactionManager, key3);\n        credentials3 = KlayCredentials.create(key3);\n    }\n\n    private void setUpCreateAccount(TransactionManager transactionManager, ECKeyPair key) throws Exception {\n        AccountCreationTransaction accountCreationTransaction = AccountCreationTransaction.create(\n                BRANDON.getAddress(),\n                Keys.getAddress(key),\n                Convert.toPeb(\"0.2\", Convert.Unit.KLAY).toBigInteger(),\n                GAS_LIMIT,\n                AccountKeyPublic.create(key.getPublicKey())\n        );\n        transactionManager.executeTransaction(accountCreationTransaction);\n    }\n// Copyright 2019 The caver-java Authors\n\n// Licensed under the Apache License, Version 2.0 (the “License”);\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n\n// http://www.apache.org/licenses/LICENSE-2.0\n\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an “AS IS” BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\npackage org.caverj.scenario;\n\nimport org.caverj.crpyto.*;\nimport org.caverj.tx.model.AccountCreationTransaction;\nimport org.caverj.methods.response.KlayTransactionReceipt;\nimport org.caverj.tx.account.AccountKey;\nimport org.caverj.tx.account.AccountKeyPublic;\nimport org.caverj.tx.account.AccountKeyRoleBased;\nimport org.caverj.tx.account.AccountKeyWeightedMultiSig;\nimport org.caverj.tx.manager.PollingTransactionReceiptProcessor;\nimport org.caverj.tx.manager.TransactionManager;\nimport org.caverj.utils.Convert;\nimport org.junit.Test;\nimport org.web3j.crypto.ECKeyPair;\nimport org.web3j.crypto.Keys;\n\nimport java.math.BigInteger;\nimport java.util.Arrays;\n\nimport static org.caverj.base.Accounts.BRANDON;\nimport static org.junit.Assert.assertEquals;\n\npublic class AccountKeyIT extends Scenario {\n\n    KlayCredentials credentials1, credentials2, credentials3;\n\n    @Test\n    public void AccountKeyRolebased() throws Exception {\n        KlayCredentials rolebased = KlayCredentials.create(Keys.createEcKeyPair());\n        TransactionManager transactionManager = new TransactionManager.Builder(caverj, BRANDON)\n                .setTransactionReceiptProcessor(new PollingTransactionReceiptProcessor(caverj, 1000, 15))\n                .build();\n        setUpAccount(transactionManager);\n\n        AccountCreationTransaction accountCreationTransaction = AccountCreationTransaction.create(\n                BRANDON.getAddress(),\n                rolebased.getAddress(),\n                Convert.toPeb(\"0.2\", Convert.Unit.KLAY).toBigInteger(),\n                GAS_LIMIT,\n                createRolebased()\n        );\n        KlayTransactionReceipt.TransactionReceipt transactionReceipt = transactionManager.executeTransaction(accountCreationTransaction);\n        assertEquals(\"0x1\", transactionReceipt.getStatus());\n    }\n\n    private AccountKey createRolebased() {\n        return AccountKeyRoleBased.create(\n                AccountKeyPublic.create(credentials1.getEcKeyPair().getPublicKey()),\n                AccountKeyPublic.create(credentials2.getEcKeyPair().getPublicKey()),\n                getRoleFeePayer()\n        );\n    }\n\n    private AccountKeyWeightedMultiSig getRoleFeePayer() {\n        return AccountKeyWeightedMultiSig.create(\n                BigInteger.valueOf(5),\n                Arrays.asList(\n                        AccountKeyWeightedMultiSig.WeightedPublicKey.create(\n                                BigInteger.valueOf(2),\n                                AccountKeyPublic.create(credentials1.getEcKeyPair().getPublicKey())\n                        ),\n                        AccountKeyWeightedMultiSig.WeightedPublicKey.create(\n                                BigInteger.valueOf(2),\n                                AccountKeyPublic.create(credentials2.getEcKeyPair().getPublicKey())\n                        ),\n                        AccountKeyWeightedMultiSig.WeightedPublicKey.create(\n                                BigInteger.valueOf(1),\n                                AccountKeyPublic.create(credentials3.getEcKeyPair().getPublicKey())\n                        )\n                )\n        );\n    }\n\n    private void setUpAccount(TransactionManager transactionManager) throws Exception {\n        ECKeyPair key1 = Keys.createEcKeyPair();\n        setUpCreateAccount(transactionManager, key1);\n        credentials1 = KlayCredentials.create(key1);\n\n        ECKeyPair key2 = Keys.createEcKeyPair();\n        setUpCreateAccount(transactionManager, key2);\n        credentials2 = KlayCredentials.create(key2);\n\n        ECKeyPair key3 = Keys.createEcKeyPair();\n        setUpCreateAccount(transactionManager, key3);\n        credentials3 = KlayCredentials.create(key3);\n    }\n\n    private void setUpCreateAccount(TransactionManager transactionManager, ECKeyPair key) throws Exception {\n        AccountCreationTransaction accountCreationTransaction = AccountCreationTransaction.create(\n                BRANDON.getAddress(),\n                Keys.getAddress(key),\n                Convert.toPeb(\"0.2\", Convert.Unit.KLAY).toBigInteger(),\n                GAS_LIMIT,\n                AccountKeyPublic.create(key.getPublicKey())\n        );\n        transactionManager.executeTransaction(accountCreationTransaction);\n    }\n\n}\n// Copyright 2019 The caver-java Authors\n\n// Licensed under the Apache License, Version 2.0 (the “License”);\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n\n// http://www.apache.org/licenses/LICENSE-2.0\n\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an “AS IS” BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\npackage org.caverj.scenario;\n\nimport org.caverj.crpyto.*;\nimport org.caverj.tx.model.AccountCreationTransaction;\nimport org.caverj.methods.response.KlayTransactionReceipt;\nimport org.caverj.tx.account.AccountKey;\nimport org.caverj.tx.account.AccountKeyPublic;\nimport org.caverj.tx.account.AccountKeyRoleBased;\nimport org.caverj.tx.account.AccountKeyWeightedMultiSig;\nimport org.caverj.tx.manager.PollingTransactionReceiptProcessor;\nimport org.caverj.tx.manager.TransactionManager;\nimport org.caverj.utils.Convert;\nimport org.junit.Test;\nimport org.web3j.crypto.ECKeyPair;\nimport org.web3j.crypto.Keys;\n\nimport java.math.BigInteger;\nimport java.util.Arrays;\n\nimport static org.caverj.base.Accounts.BRANDON;\nimport static org.junit.Assert.assertEquals;\n\npublic class AccountKeyIT extends Scenario {\n\n    KlayCredentials credentials1, credentials2, credentials3;\n\n    @Test\n    public void AccountKeyRolebased() throws Exception {\n        KlayCredentials rolebased = KlayCredentials.create(Keys.createEcKeyPair());\n        TransactionManager transactionManager = new TransactionManager.Builder(caverj, BRANDON)\n                .setTransactionReceiptProcessor(new PollingTransactionReceiptProcessor(caverj, 1000, 15))\n                .build();\n        setUpAccount(transactionManager);\n\n        AccountCreationTransaction accountCreationTransaction = AccountCreationTransaction.create(\n                BRANDON.getAddress(),\n                rolebased.getAddress(),\n                Convert.toPeb(\"0.2\", Convert.Unit.KLAY).toBigInteger(),\n                GAS_LIMIT,\n                createRolebased()\n        );\n        KlayTransactionReceipt.TransactionReceipt transactionReceipt = transactionManager.executeTransaction(accountCreationTransaction);\n        assertEquals(\"0x1\", transactionReceipt.getStatus());\n    }\n\n    private AccountKey createRolebased() {\n        return AccountKeyRoleBased.create(\n                AccountKeyPublic.create(credentials1.getEcKeyPair().getPublicKey()),\n                AccountKeyPublic.create(credentials2.getEcKeyPair().getPublicKey()),\n                getRoleFeePayer()\n        );\n    }\n\n    private AccountKeyWeightedMultiSig getRoleFeePayer() {\n        return AccountKeyWeightedMultiSig.create(\n                BigInteger.valueOf(5),\n                Arrays.asList(\n                        AccountKeyWeightedMultiSig.WeightedPublicKey.create(\n                                BigInteger.valueOf(2),\n                                AccountKeyPublic.create(credentials1.getEcKeyPair().getPublicKey())\n                        ),\n                        AccountKeyWeightedMultiSig.WeightedPublicKey.create(\n                                BigInteger.valueOf(2),\n                                AccountKeyPublic.create(credentials2.getEcKeyPair().getPublicKey())\n                        ),\n                        AccountKeyWeightedMultiSig.WeightedPublicKey.create(\n                                BigInteger.valueOf(1),\n                                AccountKeyPublic.create(credentials3.getEcKeyPair().getPublicKey())\n                        )\n                )\n        );\n    }\n\n    private void setUpAccount(TransactionManager transactionManager) throws Exception {\n        ECKeyPair key1 = Keys.createEcKeyPair();\n        setUpCreateAccount(transactionManager, key1);\n        credentials1 = KlayCredentials.create(key1);\n\n        ECKeyPair key2 = Keys.createEcKeyPair();\n        setUpCreateAccount(transactionManager, key2);\n        credentials2 = KlayCredentials.create(key2);\n\n        ECKeyPair key3 = Keys.createEcKeyPair();\n        setUpCreateAccount(transactionManager, key3);\n        credentials3 = KlayCredentials.create(key3);\n    }\n\n    private void setUpCreateAccount(TransactionManager transactionManager, ECKeyPair key) throws Exception {\n        AccountCreationTransaction accountCreationTransaction = AccountCreationTransaction.create(\n                BRANDON.getAddress(),\n                Keys.getAddress(key),\n                Convert.toPeb(\"0.2\", Convert.Unit.KLAY).toBigInteger(),\n                GAS_LIMIT,\n                AccountKeyPublic.create(key.getPublicKey())\n        );\n        transactionManager.executeTransaction(accountCreationTransaction);\n    }\n\n}\n// Copyright 2019 The caver-java Authors\n\n// Licensed under the Apache License, Version 2.0 (the “License”);\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n\n// http://www.apache.org/licenses/LICENSE-2.0\n\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an “AS IS” BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\npackage org.caverj.scenario;\n\nimport org.caverj.crpyto.*;\nimport org.caverj.tx.model.AccountCreationTransaction;\nimport org.caverj.methods.response.KlayTransactionReceipt;\nimport org.caverj.tx.account.AccountKey;\nimport org.caverj.tx.account.AccountKeyPublic;\nimport org.caverj.tx.account.AccountKeyRoleBased;\nimport org.caverj.tx.account.AccountKeyWeightedMultiSig;\nimport org.caverj.tx.manager.PollingTransactionReceiptProcessor;\nimport org.caverj.tx.manager.TransactionManager;\nimport org.caverj.utils.Convert;\nimport org.junit.Test;\nimport org.web3j.crypto.ECKeyPair;\nimport org.web3j.crypto.Keys;\n\nimport java.math.BigInteger;\nimport java.util.Arrays;\n\nimport static org.caverj.base.Accounts.BRANDON;\nimport static org.junit.Assert.assertEquals;\n\npublic class AccountKeyIT extends Scenario {\n\n    KlayCredentials credentials1, credentials2, credentials3;\n\n    @Test\n    public void AccountKeyRolebased() throws Exception {\n        KlayCredentials rolebased = KlayCredentials.create(Keys.createEcKeyPair());\n        TransactionManager transactionManager = new TransactionManager.Builder(caverj, BRANDON)\n                .setTransactionReceiptProcessor(new PollingTransactionReceiptProcessor(caverj, 1000, 15))\n                .build();\n        setUpAccount(transactionManager);\n\n        AccountCreationTransaction accountCreationTransaction = AccountCreationTransaction.create(\n                BRANDON.getAddress(),\n                rolebased.getAddress(),\n                Convert.toPeb(\"0.2\", Convert.Unit.KLAY).toBigInteger(),\n                GAS_LIMIT,\n                createRolebased()\n        );\n        KlayTransactionReceipt.TransactionReceipt transactionReceipt = transactionManager.executeTransaction(accountCreationTransaction);\n        assertEquals(\"0x1\", transactionReceipt.getStatus());\n    }\n\n    private AccountKey createRolebased() {\n        return AccountKeyRoleBased.create(\n                AccountKeyPublic.create(credentials1.getEcKeyPair().getPublicKey()),\n                AccountKeyPublic.create(credentials2.getEcKeyPair().getPublicKey()),\n                getRoleFeePayer()\n        );\n    }\n\n    private AccountKeyWeightedMultiSig getRoleFeePayer() {\n        return AccountKeyWeightedMultiSig.create(\n                BigInteger.valueOf(5),\n                Arrays.asList(\n                        AccountKeyWeightedMultiSig.WeightedPublicKey.create(\n                                BigInteger.valueOf(2),\n                                AccountKeyPublic.create(credentials1.getEcKeyPair().getPublicKey())\n                        ),\n                        AccountKeyWeightedMultiSig.WeightedPublicKey.create(\n                                BigInteger.valueOf(2),\n                                AccountKeyPublic.create(credentials2.getEcKeyPair().getPublicKey())\n                        ),\n                        AccountKeyWeightedMultiSig.WeightedPublicKey.create(\n                                BigInteger.valueOf(1),\n                                AccountKeyPublic.create(credentials3.getEcKeyPair().getPublicKey())\n                        )\n                )\n        );\n    }\n\n    private void setUpAccount(TransactionManager transactionManager) throws Exception {\n        ECKeyPair key1 = Keys.createEcKeyPair();\n        setUpCreateAccount(transactionManager, key1);\n        credentials1 = KlayCredentials.create(key1);\n\n        ECKeyPair key2 = Keys.createEcKeyPair();\n        setUpCreateAccount(transactionManager, key2);\n        credentials2 = KlayCredentials.create(key2);\n\n        ECKeyPair key3 = Keys.createEcKeyPair();\n        setUpCreateAccount(transactionManager, key3);\n        credentials3 = KlayCredentials.create(key3);\n    }\n\n    private void setUpCreateAccount(TransactionManager transactionManager, ECKeyPair key) throws Exception {\n        AccountCreationTransaction accountCreationTransaction = AccountCreationTransaction.create(\n                BRANDON.getAddress(),\n                Keys.getAddress(key),\n                Convert.toPeb(\"0.2\", Convert.Unit.KLAY).toBigInteger(),\n                GAS_LIMIT,\n                AccountKeyPublic.create(key.getPublicKey())\n        );\n        transactionManager.executeTransaction(accountCreationTransaction);\n    }\n\n}\n// Copyright 2019 The caver-java Authors\n\n// Licensed under the Apache License, Version 2.0 (the “License”);\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n\n// http://www.apache.org/licenses/LICENSE-2.0\n\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an “AS IS” BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\npackage org.caverj.scenario;\n\nimport org.caverj.crpyto.*;\nimport org.caverj.tx.model.AccountCreationTransaction;\nimport org.caverj.methods.response.KlayTransactionReceipt;\nimport org.caverj.tx.account.AccountKey;\nimport org.caverj.tx.account.AccountKeyPublic;\nimport org.caverj.tx.account.AccountKeyRoleBased;\nimport org.caverj.tx.account.AccountKeyWeightedMultiSig;\nimport org.caverj.tx.manager.PollingTransactionReceiptProcessor;\nimport org.caverj.tx.manager.TransactionManager;\nimport org.caverj.utils.Convert;\nimport org.junit.Test;\nimport org.web3j.crypto.ECKeyPair;\nimport org.web3j.crypto.Keys;\n\nimport java.math.BigInteger;\nimport java.util.Arrays;\n\nimport static org.caverj.base.Accounts.BRANDON;\nimport static org.junit.Assert.assertEquals;\n\npublic class AccountKeyIT extends Scenario {\n\n    KlayCredentials credentials1, credentials2, credentials3;\n\n    @Test\n    public void AccountKeyRolebased() throws Exception {\n        KlayCredentials rolebased = KlayCredentials.create(Keys.createEcKeyPair());\n        TransactionManager transactionManager = new TransactionManager.Builder(caverj, BRANDON)\n                .setTransactionReceiptProcessor(new PollingTransactionReceiptProcessor(caverj, 1000, 15))\n                .build();\n        setUpAccount(transactionManager);\n\n        AccountCreationTransaction accountCreationTransaction = AccountCreationTransaction.create(\n                BRANDON.getAddress(),\n                rolebased.getAddress(),\n                Convert.toPeb(\"0.2\", Convert.Unit.KLAY).toBigInteger(),\n                GAS_LIMIT,\n                createRolebased()\n        );\n        KlayTransactionReceipt.TransactionReceipt transactionReceipt = transactionManager.executeTransaction(accountCreationTransaction);\n        assertEquals(\"0x1\", transactionReceipt.getStatus());\n    }\n\n    private AccountKey createRolebased() {\n        return AccountKeyRoleBased.create(\n                AccountKeyPublic.create(credentials1.getEcKeyPair().getPublicKey()),\n                AccountKeyPublic.create(credentials2.getEcKeyPair().getPublicKey()),\n                getRoleFeePayer()\n        );\n    }\n\n    private AccountKeyWeightedMultiSig getRoleFeePayer() {\n        return AccountKeyWeightedMultiSig.create(\n                BigInteger.valueOf(5),\n                Arrays.asList(\n                        AccountKeyWeightedMultiSig.WeightedPublicKey.create(\n                                BigInteger.valueOf(2),\n                                AccountKeyPublic.create(credentials1.getEcKeyPair().getPublicKey())\n                        ),\n                        AccountKeyWeightedMultiSig.WeightedPublicKey.create(\n                                BigInteger.valueOf(2),\n                                AccountKeyPublic.create(credentials2.getEcKeyPair().getPublicKey())\n                        ),\n                        AccountKeyWeightedMultiSig.WeightedPublicKey.create(\n                                BigInteger.valueOf(1),\n                                AccountKeyPublic.create(credentials3.getEcKeyPair().getPublicKey())\n                        )\n                )\n        );\n    }\n\n    private void setUpAccount(TransactionManager transactionManager) throws Exception {\n        ECKeyPair key1 = Keys.createEcKeyPair();\n        setUpCreateAccount(transactionManager, key1);\n        credentials1 = KlayCredentials.create(key1);\n\n        ECKeyPair key2 = Keys.createEcKeyPair();\n        setUpCreateAccount(transactionManager, key2);\n        credentials2 = KlayCredentials.create(key2);\n\n        ECKeyPair key3 = Keys.createEcKeyPair();\n        setUpCreateAccount(transactionManager, key3);\n        credentials3 = KlayCredentials.create(key3);\n    }\n\n    private void setUpCreateAccount(TransactionManager transactionManager, ECKeyPair key) throws Exception {\n        AccountCreationTransaction accountCreationTransaction = AccountCreationTransaction.create(\n                BRANDON.getAddress(),\n                Keys.getAddress(key),\n                Convert.toPeb(\"0.2\", Convert.Unit.KLAY).toBigInteger(),\n                GAS_LIMIT,\n                AccountKeyPublic.create(key.getPublicKey())\n        );\n        transactionManager.executeTransaction(accountCreationTransaction);\n    }\n\n}\n// Copyright 2019 The caver-java Authors\n\n// Licensed under the Apache License, Version 2.0 (the “License”);\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n\n// http://www.apache.org/licenses/LICENSE-2.0\n\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an “AS IS” BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\npackage org.caverj.scenario;\n\nimport org.caverj.crpyto.*;\nimport org.caverj.tx.model.AccountCreationTransaction;\nimport org.caverj.methods.response.KlayTransactionReceipt;\nimport org.caverj.tx.account.AccountKey;\nimport org.caverj.tx.account.AccountKeyPublic;\nimport org.caverj.tx.account.AccountKeyRoleBased;\nimport org.caverj.tx.account.AccountKeyWeightedMultiSig;\nimport org.caverj.tx.manager.PollingTransactionReceiptProcessor;\nimport org.caverj.tx.manager.TransactionManager;\nimport org.caverj.utils.Convert;\nimport org.junit.Test;\nimport org.web3j.crypto.ECKeyPair;\nimport org.web3j.crypto.Keys;\n\nimport java.math.BigInteger;\nimport java.util.Arrays;\n\nimport static org.caverj.base.Accounts.BRANDON;\nimport static org.junit.Assert.assertEquals;\n\npublic class AccountKeyIT extends Scenario {\n\n    KlayCredentials credentials1, credentials2, credentials3;\n\n    @Test\n    public void AccountKeyRolebased() throws Exception {\n        KlayCredentials rolebased = KlayCredentials.create(Keys.createEcKeyPair());\n        TransactionManager transactionManager = new TransactionManager.Builder(caverj, BRANDON)\n                .setTransactionReceiptProcessor(new PollingTransactionReceiptProcessor(caverj, 1000, 15))\n                .build();\n        setUpAccount(transactionManager);\n\n        AccountCreationTransaction accountCreationTransaction = AccountCreationTransaction.create(\n                BRANDON.getAddress(),\n                rolebased.getAddress(),\n                Convert.toPeb(\"0.2\", Convert.Unit.KLAY).toBigInteger(),\n                GAS_LIMIT,\n                createRolebased()\n        );\n        KlayTransactionReceipt.TransactionReceipt transactionReceipt = transactionManager.executeTransaction(accountCreationTransaction);\n        assertEquals(\"0x1\", transactionReceipt.getStatus());\n    }\n\n    private AccountKey createRolebased() {\n        return AccountKeyRoleBased.create(\n                AccountKeyPublic.create(credentials1.getEcKeyPair().getPublicKey()),\n                AccountKeyPublic.create(credentials2.getEcKeyPair().getPublicKey()),\n                getRoleFeePayer()\n        );\n    }\n\n    private AccountKeyWeightedMultiSig getRoleFeePayer() {\n        return AccountKeyWeightedMultiSig.create(\n                BigInteger.valueOf(5),\n                Arrays.asList(\n                        AccountKeyWeightedMultiSig.WeightedPublicKey.create(\n                                BigInteger.valueOf(2),\n                                AccountKeyPublic.create(credentials1.getEcKeyPair().getPublicKey())\n                        ),\n                        AccountKeyWeightedMultiSig.WeightedPublicKey.create(\n                                BigInteger.valueOf(2),\n                                AccountKeyPublic.create(credentials2.getEcKeyPair().getPublicKey())\n                        ),\n                        AccountKeyWeightedMultiSig.WeightedPublicKey.create(\n                                BigInteger.valueOf(1),\n                                AccountKeyPublic.create(credentials3.getEcKeyPair().getPublicKey())\n                        )\n                )\n        );\n    }\n\n    private void setUpAccount(TransactionManager transactionManager) throws Exception {\n        ECKeyPair key1 = Keys.createEcKeyPair();\n        setUpCreateAccount(transactionManager, key1);\n        credentials1 = KlayCredentials.create(key1);\n\n        ECKeyPair key2 = Keys.createEcKeyPair();\n        setUpCreateAccount(transactionManager, key2);\n        credentials2 = KlayCredentials.create(key2);\n\n        ECKeyPair key3 = Keys.createEcKeyPair();\n        setUpCreateAccount(transactionManager, key3);\n        credentials3 = KlayCredentials.create(key3);\n    }\n\n    private void setUpCreateAccount(TransactionManager transactionManager, ECKeyPair key) throws Exception {\n        AccountCreationTransaction accountCreationTransaction = AccountCreationTransaction.create(\n                BRANDON.getAddress(),\n                Keys.getAddress(key),\n                Convert.toPeb(\"0.2\", Convert.Unit.KLAY).toBigInteger(),\n                GAS_LIMIT,\n                AccountKeyPublic.create(key.getPublicKey())\n        );\n        transactionManager.executeTransaction(accountCreationTransaction);\n    }\n\n}\n\n}\n ECKeyPair key1 = Keys.createEcKeyPair();\n        setUpCreateAccount(transactionManager, key1);\n        credentials1 = KlayCredentials.create(key1);\n\n        ECKeyPair key2 = Keys.createEcKeyPair();\n        setUpCreateAccount(transactionManager, key2);\n        credentials2 = KlayCredentials.create(key2);\n ECKeyPair key1 = Keys.createEcKeyPair();\n        setUpCreateAccount(transactionManager, key1);\n        credentials1 = KlayCredentials.create(key1);\n\n        ECKeyPair key2 = Keys.createEcKeyPair();\n        setUpCreateAccount(transactionManager, key2);\n        credentials2 = KlayCredentials.create(key2);\n ECKeyPair key1 = Keys.createEcKeyPair();\n        setUpCreateAccount(transactionManager, key1);\n        credentials1 = KlayCredentials.create(key1);\n\n        ECKeyPair key2 = Keys.createEcKeyPair();\n        setUpCreateAccount(transactionManager, key2);\n        credentials2 = KlayCredentials.create(key2);\n ECKeyPair key1 = Keys.createEcKeyPair();\n        setUpCreateAccount(transactionManager, key1);\n        credentials1 = KlayCredentials.create(key1);\n\n        ECKeyPair key2 = Keys.createEcKeyPair();\n        setUpCreateAccount(transactionManager, key2);\n        credentials2 = KlayCredentials.create(key2);\n ECKeyPair key1 = Keys.createEcKeyPair();\n        setUpCreateAccount(transactionManager, key1);\n        credentials1 = KlayCredentials.create(key1);\n\n        ECKeyPair key2 = Keys.createEcKeyPair();\n        setUpCreateAccount(transactionManager, key2);\n        credentials2 = KlayCredentials.create(key2);\n ECKeyPair key1 = Keys.createEcKeyPair();\n        setUpCreateAccount(transactionManager, key1);\n        credentials1 = KlayCredentials.create(key1);\n\n        ECKeyPair key2 = Keys.createEcKeyPair();\n        setUpCreateAccount(transactionManager, key2);\n        credentials2 = KlayCredentials.create(key2);\n ECKeyPair key1 = Keys.createEcKeyPair();\n        setUpCreateAccount(transactionManager, key1);\n        credentials1 = KlayCredentials.create(key1);\n\n        ECKeyPair key2 = Keys.createEcKeyPair();\n        setUpCreateAccount(transactionManager, key2);\n        credentials2 = KlayCredentials.create(key2);\n ECKeyPair key1 = Keys.createEcKeyPair();\n        setUpCreateAccount(transactionManager, key1);\n        credentials1 = KlayCredentials.create(key1);\n\n        ECKeyPair key2 = Keys.createEcKeyPair();\n        setUpCreateAccount(transactionManager, key2);\n        credentials2 = KlayCredentials.create(key2);\n ECKeyPair key1 = Keys.createEcKeyPair();\n        setUpCreateAccount(transactionManager, key1);\n        credentials1 = KlayCredentials.create(key1);\n\n        ECKeyPair key2 = Keys.createEcKeyPair();\n        setUpCreateAccount(transactionManager, key2);\n        credentials2 = KlayCredentials.create(key2);\n ECKeyPair key1 = Keys.createEcKeyPair();\n        setUpCreateAccount(transactionManager, key1);\n        credentials1 = KlayCredentials.create(key1);\n\n        ECKeyPair key2 = Keys.createEcKeyPair();\n        setUpCreateAccount(transactionManager, key2);\n        credentials2 = KlayCredentials.create(key2);\n\n"
      },
      "expected":{
        "status":true
      }
    }
  ]
}

