Skip to content

ChainSigTransaction Policy

ChainSigTransaction Policy defines what transactions can be signed using NEAR chain signatures. This enables Dew Vault Managers to build sophisticated cross-chain DeFi strategies.

ChainSigTransaction Policy can be created or updated through upsert_policy policy.

#[near(serializers = [json, borsh])]
#[derive(Clone)]
pub struct ChainSigTransactionConfig {
    pub derivation_path: String,
    pub chain_environment: ChainEnvironment,
    pub restrictions: Vec<Restriction>,
}

Below is an example of a ChainSigTransaction Policy:

{
  id: "approve_core_usdc_bridge",
  description: "Approve Core USDC spending by bridge contract for Core to Arbitrum bridging",
  required_role: "strategist",
  required_vote_count: 1,
  policy_type: "ChainSigTransaction",
  policy_details: {
    ChainSigTransaction: {
      derivation_path: constant.CHAIN_SIG_ACCOUNT_1,
      chain_environment: "EVM",
      restrictions: [
        {
          schema: `
            and(
              $.contract_id.case_insensitive_equal("${CORE_USDC_ADDRESS}"),
              $.function_name.equal("approve"),
              $.args.spender.case_insensitive_equal("${CORE_ARB_BRIDGE_ADDRESS}")
            )
          `,
          interface: btoa(
            JSON.stringify(evm.ERC_20_ABI.filter((e) => e.name === "approve"))
          )
        }
      ]
    }
  },
  activation_time: "0",
  proposal_expiry_time_nanosec: "86400000000000",
  required_pending_actions: []
}