signTransaction method

  1. @override
Future<String> signTransaction(
  1. String chain,
  2. String accountAddress,
  3. String transaction,
  4. String? chainId, [
  5. List<int>? signingIndexes,
  6. List<int>? allowedSighash,
])
override

Signs the serialized unsigned transaction for accountAddress on chain, through the connected external wallet. Same shape as WalletSigner.signTransaction.

Implementation

@override
Future<String> signTransaction(String chain, String accountAddress, String transaction, String? chainId, [List<int>? signingIndexes, List<int>? allowedSighash]) async {
  Future<String> instrumentationOperation() async {
    final operationScope = _state.flowScope.capture(replace: false);
    await operationScope.ready();
    final walletConnectProjectId = _state.projectSettings?.sdk?.walletConnect?.projectId;
    if (walletConnectProjectId == null) {
      throw DynamicStateException("This environment has no WalletConnect projectId — enable WalletConnect for it in the Dynamic dashboard");
    }
    operationScope.check();
    await _externalWalletProvider.initialize(walletConnectProjectId, _config.appName, _config.appLogoUrl, _config.nativeLink, _config.universalLink);
    operationScope.check();
    _state.externalWalletActionRequested.emit(ExternalWalletActionRequest(action: "signTransaction", walletName: (_externalWalletState.externalWalletAccounts == null ? null : firstWhereOrNull<ExternalWalletAccount>(_externalWalletState.externalWalletAccounts!, (item) => item.address == accountAddress))?.displayName, address: accountAddress, chain: chain));
    operationScope.check();
    final signed = await _externalWalletProvider.signTransaction(chain, accountAddress, transaction, chainId, signingIndexes, allowedSighash);
    operationScope.check();
    return signed;
  }
  return await _api.instrumentation.runAsync("externalWallet.signTransaction", instrumentationOperation);
}