Skip to content

Commit

Permalink
Add permissioned delegation tests
Browse files Browse the repository at this point in the history
  • Loading branch information
GhostWalker562 committed Jan 31, 2025
1 parent 4a6ea55 commit f77d79e
Show file tree
Hide file tree
Showing 5 changed files with 62 additions and 5 deletions.
2 changes: 1 addition & 1 deletion src/account/AbstractedAccount.ts
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,7 @@ export class AbstractedAccount extends Account {
return serializer.toUint8Array();
},
accountAddress: signer.accountAddress,
authenticationFunction: `${signer.accountAddress}::permissioned_delegation::authenticate`,
authenticationFunction: "0x1::permissioned_delegation::authenticate",
});
}

Expand Down
41 changes: 38 additions & 3 deletions tests/e2e/api/abstraction.test.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,12 @@
import { AbstractedAccount, Network } from "../../../src";
import { AbstractedAccount, MoveVector, Network } from "../../../src";
import { Ed25519Account } from "../../../src/account/Ed25519Account";
import {} from "../../../src/core/crypto";
import { FUND_AMOUNT } from "../../unit/helper";
import { getAptosClient } from "../helper";
import { publishAnyAuthenticatorAAPackage, publishHelloWorldAAPackage } from "../transaction/helper";
import {
addPermissionDelegationScriptBytecode,
publishAnyAuthenticatorAAPackage,
publishHelloWorldAAPackage,
} from "../transaction/helper";

describe("abstraction api", () => {
// TODO: Change to localnet when CLI supports indexing aa signatures
Expand Down Expand Up @@ -173,4 +176,36 @@ describe("abstraction api", () => {
}).rejects.toThrow();
});
});

describe("enable permissioned delegation and send a transaction with permissions", () => {
const alice = Ed25519Account.generate();
const recipient = Ed25519Account.generate();

beforeAll(async () => {
await aptos.fundAccount({ accountAddress: alice.accountAddress, amount: FUND_AMOUNT });
await aptos.fundAccount({ accountAddress: recipient.accountAddress, amount: FUND_AMOUNT });
const txn = await aptos.transaction.build.simple({
sender: alice.accountAddress,
data: {
bytecode: addPermissionDelegationScriptBytecode,
functionArguments: [MoveVector.U8(alice.publicKey.toUint8Array())],
},
});
const pendingTxn = await aptos.signAndSubmitTransaction({ signer: alice, transaction: txn });
await aptos.waitForTransaction({ transactionHash: pendingTxn.hash });
});

it("should be able to send a transaction with permissioned signer", async () => {
const abstractedAccount = AbstractedAccount.fromPermissionedSigner({ signer: alice });
const txn = await aptos.transferFungibleAsset({
amount: 100,
fungibleAssetMetadataAddress: "0xa",
recipient: recipient.accountAddress.toString(),
sender: abstractedAccount,
});
const pendingTxn = await aptos.signAndSubmitTransaction({ signer: abstractedAccount, transaction: txn });
const response = await aptos.waitForTransaction({ transactionHash: pendingTxn.hash });
expect(response.success).toBe(true);
});
});
});
4 changes: 4 additions & 0 deletions tests/e2e/transaction/helper.ts
Original file line number Diff line number Diff line change
Expand Up @@ -370,6 +370,10 @@ export async function publishTransferPackage(aptos: Aptos, senderAccount: Accoun
);
}

export const addPermissionDelegationScriptBytecode =
// eslint-disable-next-line max-len
"a11ceb0b0700000a0901001402141a032e38046604056a4807b201a70308d904400699054d10e6051f0103010401060109010d010e01120114011601190002080002080700030b0700040c0f000510070100000818070001050301010001020704050001030a05060001050f01080100010311090a000106130b01000107150b0100010817040c0001091a0d0100010002030702060c0a020001080001060c010a02010801010802010803010b0401090004060c08020b0401080303010c03060c060c0301080504060c0508050805050802030b04010803060c0c083c53454c463e5f30046d61696e094170746f73436f696e0a6170746f735f636f696e04636f696e196d6967726174655f746f5f66756e6769626c655f73746f72650765643235353139256e65775f756e76616c6964617465645f7075626c69635f6b65795f66726f6d5f627974657314556e76616c6964617465645075626c69634b6579177065726d697373696f6e65645f64656c65676174696f6e0f67656e5f656432353531395f6b65790d44656c65676174696f6e4b65790b526174654c696d697465720c726174655f6c696d69746572066f7074696f6e046e6f6e65064f7074696f6e176164645f7065726d697373696f6e65645f68616e646c65167072696d6172795f66756e6769626c655f73746f7265146772616e745f6170745f7065726d697373696f6e167472616e73616374696f6e5f76616c69646174696f6e146772616e745f6761735f7065726d697373696f6e06737472696e67047574663806537472696e67136163636f756e745f6162737472616374696f6e286164645f646973706174636861626c655f61757468656e7469636174696f6e5f66756e6374696f6effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000000000000001052000000000000000000000000000000000000000000000000000000000000000010a0218177065726d697373696f6e65645f64656c65676174696f6e0a020d0c61757468656e74696361746514636f6d70696c6174696f6e5f6d65746164617461090003322e3003322e3100000e1e0a0038000b01110111020c020a0038010c040b020b040600a0724e1809000011040c060a000e060600e1f5050000000011050a000e060600e1f5050000000011060b0007000701110707021107110802";

export async function publishAnyAuthenticatorAAPackage(aptos: Aptos, senderAccount: Account) {
return publishPackage(
aptos,
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
script {
use aptos_framework::coin::{Self};
use aptos_framework::transaction_validation::{Self};
use aptos_framework::primary_fungible_store::{Self};
use aptos_framework::account_abstraction::{Self};
use aptos_framework::permissioned_delegation::{Self};
use aptos_std::ed25519;
use std::string::utf8;
use std::option;

fun main(sender: &signer, sender_public_key: vector<u8>) {
coin::migrate_to_fungible_store<aptos_framework::aptos_coin::AptosCoin>(sender);
let key = permissioned_delegation::gen_ed25519_key(ed25519::new_unvalidated_public_key_from_bytes(sender_public_key));
let permissioned_signer = permissioned_delegation::add_permissioned_handle(sender, key, option::none(), 10000000000000);
primary_fungible_store::grant_apt_permission(sender, &permissioned_signer, 100000000);
transaction_validation::grant_gas_permission(sender, &permissioned_signer, 100000000); // 1 apt because that is the max_gas
account_abstraction::add_dispatchable_authentication_function(sender, @aptos_framework, utf8(b"permissioned_delegation"), utf8(b"authenticate"));// 10 apt
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
module deployer::hello_world_authenticator {
use aptos_framework::auth_data::{Self, AbstractionAuthData};
use std::bcs;

const EINVALID_SIGNATURE: u64 = 1;

Expand Down

0 comments on commit f77d79e

Please sign in to comment.