Skip to content

Commit

Permalink
feat(sdk): enable withdrawals v1 in JS SDK
Browse files Browse the repository at this point in the history
  • Loading branch information
shumkov committed Oct 3, 2024
1 parent 09d89f8 commit f1eaa15
Show file tree
Hide file tree
Showing 6 changed files with 36 additions and 23 deletions.
Binary file added .yarn/cache/fsevents-patch-19706e7e35-10.zip
Binary file not shown.
Original file line number Diff line number Diff line change
Expand Up @@ -28,37 +28,50 @@ const MIN_ASSET_UNLOCK_CORE_FEE_PER_BYTE = 1;
const MINIMAL_WITHDRAWAL_AMOUNT = ASSET_UNLOCK_TX_SIZE * MIN_ASSET_UNLOCK_CORE_FEE_PER_BYTE * 1000;

type WithdrawalOptions = {
signingKeyIndex: number
signingKeyIndex?: number
toAddress?: string
};

/** Creates platform credits withdrawal request
* @param identity - identity to withdraw from
* @param amount - amount of credits to withdraw
* @param to - Dash L1 address
* @param options - withdrawal options
* @param [options] - withdrawal options
* @param [options.toAddress] - withdrawal destination address
*/
export async function creditWithdrawal(
this: Platform,
identity: Identity,
amount: number,
to: string,
options: WithdrawalOptions = {
signingKeyIndex: 3,
},
options: WithdrawalOptions = { },
): Promise<Metadata> {
await this.initialize();

// eslint-disable-next-line no-param-reassign
options = {
...options,
signingKeyIndex: 3,
};

const { dpp } = this;

let toAddress: Address;
try {
toAddress = new Address(to, this.client.network);
} catch (e) {
throw new Error(`Invalid core recipient "${to}" for network ${this.client.network}`);
let outputScriptBytes: Buffer | undefined;
if (options.toAddress) {
let toAddress: Address;
try {
toAddress = new Address(options.toAddress, this.client.network);
} catch (e) {
throw new Error(`Invalid core recipient "${options.toAddress}" for network ${this.client.network}`);
}

const outputScript = Script.buildPublicKeyHashOut(toAddress);
// @ts-ignore
outputScriptBytes = outputScript.toBuffer();

this.logger.debug(`[Identity#creditWithdrawal] credits withdrawal from ${identity.getId().toString()} to ${toAddress.toString()} with amount ${amount}`);
} else {
this.logger.debug(`[Identity#creditWithdrawal] credits withdrawal from ${identity.getId().toString()} to recent withdrawal address with amount ${amount}`);
}
this.logger.debug(`[Identity#creditWithdrawal] credits withdrawal from ${identity.getId().toString()} to ${toAddress.toString()} with amount ${amount}`);

const outputScript = Script.buildPublicKeyHashOut(toAddress);

const balance = identity.getBalance();
if (amount > balance) {
Expand Down Expand Up @@ -88,8 +101,7 @@ export async function creditWithdrawal(
BigInt(amount),
coreFeePerByte,
DEFAULT_POOLING,
// @ts-ignore
outputScript.toBuffer(),
outputScriptBytes,
BigInt(identityNonce),
);

Expand Down
2 changes: 1 addition & 1 deletion packages/rs-dpp/src/identity/identity_facade.rs
Original file line number Diff line number Diff line change
Expand Up @@ -123,7 +123,7 @@ impl IdentityFacade {
amount: u64,
core_fee_per_byte: u32,
pooling: Pooling,
output_script: CoreScript,
output_script: Option<CoreScript>,
identity_nonce: u64,
) -> Result<IdentityCreditWithdrawalTransition, ProtocolError> {
self.factory.create_identity_credit_withdrawal_transition(
Expand Down
5 changes: 3 additions & 2 deletions packages/rs-dpp/src/identity/identity_factory.rs
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@ use crate::state_transition::identity_credit_transfer_transition::v0::IdentityCr
use crate::state_transition::identity_credit_transfer_transition::IdentityCreditTransferTransition;
#[cfg(all(feature = "state-transitions", feature = "client"))]
use crate::state_transition::identity_credit_withdrawal_transition::v0::IdentityCreditWithdrawalTransitionV0;

Check warning on line 44 in packages/rs-dpp/src/identity/identity_factory.rs

View workflow job for this annotation

GitHub Actions / Rust packages (dpp) / Linting

unused import: `crate::state_transition::identity_credit_withdrawal_transition::v0::IdentityCreditWithdrawalTransitionV0`

warning: unused import: `crate::state_transition::identity_credit_withdrawal_transition::v0::IdentityCreditWithdrawalTransitionV0` --> packages/rs-dpp/src/identity/identity_factory.rs:44:5 | 44 | use crate::state_transition::identity_credit_withdrawal_transition::v0::IdentityCreditWithdrawalTransitionV0; | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | = note: `#[warn(unused_imports)]` on by default

Check warning on line 44 in packages/rs-dpp/src/identity/identity_factory.rs

View workflow job for this annotation

GitHub Actions / Rust packages (dash-sdk) / Linting

unused import: `crate::state_transition::identity_credit_withdrawal_transition::v0::IdentityCreditWithdrawalTransitionV0`

warning: unused import: `crate::state_transition::identity_credit_withdrawal_transition::v0::IdentityCreditWithdrawalTransitionV0` --> packages/rs-dpp/src/identity/identity_factory.rs:44:5 | 44 | use crate::state_transition::identity_credit_withdrawal_transition::v0::IdentityCreditWithdrawalTransitionV0; | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | = note: `#[warn(unused_imports)]` on by default

Check warning on line 44 in packages/rs-dpp/src/identity/identity_factory.rs

View workflow job for this annotation

GitHub Actions / Rust packages (wasm-dpp) / Linting

unused import: `crate::state_transition::identity_credit_withdrawal_transition::v0::IdentityCreditWithdrawalTransitionV0`

warning: unused import: `crate::state_transition::identity_credit_withdrawal_transition::v0::IdentityCreditWithdrawalTransitionV0` --> packages/rs-dpp/src/identity/identity_factory.rs:44:5 | 44 | use crate::state_transition::identity_credit_withdrawal_transition::v0::IdentityCreditWithdrawalTransitionV0; | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | = note: `#[warn(unused_imports)]` on by default
use crate::state_transition::identity_credit_withdrawal_transition::v1::IdentityCreditWithdrawalTransitionV1;

Check warning on line 45 in packages/rs-dpp/src/identity/identity_factory.rs

View workflow job for this annotation

GitHub Actions / Rust packages (drive) / Linting

unused import: `crate::state_transition::identity_credit_withdrawal_transition::v1::IdentityCreditWithdrawalTransitionV1`

warning: unused import: `crate::state_transition::identity_credit_withdrawal_transition::v1::IdentityCreditWithdrawalTransitionV1` --> packages/rs-dpp/src/identity/identity_factory.rs:45:5 | 45 | use crate::state_transition::identity_credit_withdrawal_transition::v1::IdentityCreditWithdrawalTransitionV1; | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | = note: `#[warn(unused_imports)]` on by default

Check warning on line 45 in packages/rs-dpp/src/identity/identity_factory.rs

View workflow job for this annotation

GitHub Actions / Rust packages (drive-abci) / Linting

unused import: `crate::state_transition::identity_credit_withdrawal_transition::v1::IdentityCreditWithdrawalTransitionV1`

warning: unused import: `crate::state_transition::identity_credit_withdrawal_transition::v1::IdentityCreditWithdrawalTransitionV1` --> packages/rs-dpp/src/identity/identity_factory.rs:45:5 | 45 | use crate::state_transition::identity_credit_withdrawal_transition::v1::IdentityCreditWithdrawalTransitionV1; | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | = note: `#[warn(unused_imports)]` on by default
#[cfg(all(feature = "state-transitions", feature = "client"))]
use crate::state_transition::identity_credit_withdrawal_transition::IdentityCreditWithdrawalTransition;
#[cfg(all(feature = "state-transitions", feature = "client"))]
Expand Down Expand Up @@ -233,10 +234,10 @@ impl IdentityFactory {
amount: u64,
core_fee_per_byte: u32,
pooling: Pooling,
output_script: CoreScript,
output_script: Option<CoreScript>,
identity_nonce: IdentityNonce,
) -> Result<IdentityCreditWithdrawalTransition, ProtocolError> {
let identity_credit_withdrawal_transition = IdentityCreditWithdrawalTransitionV0 {
let identity_credit_withdrawal_transition = IdentityCreditWithdrawalTransitionV1 {
identity_id,
amount,
core_fee_per_byte,
Expand Down
4 changes: 2 additions & 2 deletions packages/wasm-dpp/src/identity/identity_facade.rs
Original file line number Diff line number Diff line change
Expand Up @@ -206,7 +206,7 @@ impl IdentityFacadeWasm {
amount: u64,
core_fee_per_byte: u32,
pooling: u8,
output_script: Vec<u8>,
output_script: Option<Vec<u8>>,
identity_nonce: u64,
) -> Result<IdentityCreditWithdrawalTransitionWasm, JsValue> {
let pooling = match pooling {
Expand All @@ -222,7 +222,7 @@ impl IdentityFacadeWasm {
amount,
core_fee_per_byte,
pooling,
CoreScript::from_bytes(output_script),
output_script.map(CoreScript::from_bytes),
identity_nonce as IdentityNonce,
)
.map(Into::into)
Expand Down
4 changes: 2 additions & 2 deletions packages/wasm-dpp/src/identity/identity_factory.rs
Original file line number Diff line number Diff line change
Expand Up @@ -210,7 +210,7 @@ impl IdentityFactoryWasm {
amount: u64,
core_fee_per_byte: u32,
pooling: u8,
output_script: Vec<u8>,
output_script: Option<Vec<u8>>,
identity_nonce: u64,
) -> Result<IdentityCreditWithdrawalTransitionWasm, JsValue> {
let pooling = match pooling {
Expand All @@ -226,7 +226,7 @@ impl IdentityFactoryWasm {
amount,
core_fee_per_byte,
pooling,
CoreScript::from_bytes(output_script),
output_script.map(CoreScript::from_bytes),
identity_nonce as IdentityNonce,
)
.map(Into::into)
Expand Down

0 comments on commit f1eaa15

Please sign in to comment.