# vault safe Module transaction Add baal as module on outside vault safe. this will have to be approved by a current signer the proposal transaction is comprised of three steps. - transaction you want the vault to do - execTransactionFromModule on safe - executeAsBaal for proposal data ``` // tx to transfer wxdai to dao treasury safe const transferToken = await lootToken.interface.encodeFunctionData( "transfer", ["0xf593086cb713fdf85474ed231cc0db8222cf7058", "1000000000000000000"] ); // execute transfer from module const safetx = await gnosisSafe1.interface.encodeFunctionData( "execTransactionFromModule", ["0xe91D153E0b41518A2Ce8Dd3D7944Fa863463a97d", 0, transferToken, 0] ) // create proposal data const transferprop = baal.interface.encodeFunctionData( "executeAsBaal", ["0x2d413Fa9B9D8c62487892889f702bC695A139F86", 0, safetx] ); console.log('proposal1', transferprop); ``` example: https://admin.daohaus.fun/#/molochV3/0x64/0x68ee75440c79e6395880ea8009c9307432e5630b/proposals/16 ### 2nd experiment ``` const wxDaiTransfer = (new ethers.utils.Interface([ 'function transfer(address, uint256)', ])).encodeFunctionData( 'transfer', [ '0xb0a6fcf7b1de57cdea9778041d83ce1e0cd4bb85', // Baal "native" vault '1000000000000000000', ], ); const execFromModule = (new ethers.utils.Interface([ 'function execTransactionFromModule(address, uint256, bytes, uint8)', ])).encodeFunctionData( 'execTransactionFromModule', [ '0xe91D153E0b41518A2Ce8Dd3D7944Fa863463a97d', // wxdai '0', wxDaiTransfer, '0', ], ); const execAsBaal = (new ethers.utils.Interface([ 'function executeAsBaal(address, uint256, bytes)' ])).encodeFunctionData( 'executeAsBaal', [ '0x230707931998D20aeAf960D76386727274B3C585', // external Safe with baal as a module '0', execFromModule, ], ); return { to: '0xd5fd77c974776ce3c11c46ab67d8e2eb028b82d2', // Baal data: execAsBaal, value: '0', operation: '0', } ``` Internally, returned MetaTx is sent as array to `encodeMultiAction`: ``` return encodeFunction(LOCAL_ABI.GNOSIS_MULTISEND, 'multiSend', [ encodeMultiSend(rawMulti), // from '@gnosis.pm/safe-contracts' ]); ``` Finally, returned data is sent as param to `Baal.submitProposal` Example: https://admin.daohaus.fun/#/molochV3/0x64/0xd5fd77c974776ce3c11c46ab67d8e2eb028b82d2/proposals/1