Skip to content

Commit d92fc7f

Browse files
committed
Fix tests to reflect potential real config with V1 factory as well
1 parent 4f849c1 commit d92fc7f

File tree

5 files changed

+74
-8
lines changed

5 files changed

+74
-8
lines changed
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
pragma solidity >=0.5.0 <0.7.0;
2+
3+
import { Enum } from "@gnosis.pm/safe-contracts/contracts/common/Enum.sol";
4+
import { GnosisSafeProxy } from "@gnosis.pm/safe-contracts/contracts/proxies/GnosisSafeProxy.sol";
5+
import { GnosisSafe } from "@gnosis.pm/safe-contracts/contracts/GnosisSafe.sol";
6+
7+
contract CPKFactoryV1 {
8+
event ProxyCreation(GnosisSafeProxy proxy);
9+
10+
function proxyCreationCode() external pure returns (bytes memory) {
11+
return type(GnosisSafeProxy).creationCode;
12+
}
13+
14+
function createProxyAndExecTransaction(
15+
address masterCopy,
16+
uint256 saltNonce,
17+
address fallbackHandler,
18+
address to,
19+
uint256 value,
20+
bytes calldata data,
21+
Enum.Operation operation
22+
)
23+
external
24+
returns (bool execTransactionSuccess)
25+
{
26+
GnosisSafe proxy;
27+
bytes memory deploymentData = abi.encodePacked(type(GnosisSafeProxy).creationCode, abi.encode(masterCopy));
28+
bytes32 salt = keccak256(abi.encode(msg.sender, saltNonce));
29+
// solium-disable-next-line security/no-inline-assembly
30+
assembly {
31+
proxy := create2(0x0, add(0x20, deploymentData), mload(deploymentData), salt)
32+
}
33+
require(address(proxy) != address(0), "create2 call failed");
34+
35+
{
36+
address[] memory tmp = new address[](1);
37+
tmp[0] = address(this);
38+
proxy.setup(tmp, 1, address(0), "", fallbackHandler, address(0), 0, address(0));
39+
}
40+
41+
execTransactionSuccess = proxy.execTransaction(to, value, data, operation, 0, 0, 0, address(0), address(0),
42+
abi.encodePacked(uint(address(this)), uint(0), uint8(1)));
43+
44+
proxy.execTransaction(
45+
address(proxy), 0,
46+
abi.encodeWithSignature("swapOwner(address,address,address)", address(1), address(this), msg.sender),
47+
Enum.Operation.Call,
48+
0, 0, 0, address(0), address(0),
49+
abi.encodePacked(uint(address(this)), uint(0), uint8(1))
50+
);
51+
52+
emit ProxyCreation(GnosisSafeProxy(address(proxy)));
53+
}
54+
}

migrations-ts/1-deploy-contracts.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@ module.exports = async function(deployer: Truffle.Deployer, network: string) {
1717
].map(deploy));
1818
}
1919

20+
await deployer.deploy(artifacts.require('CPKFactoryV1'));
21+
2022
await deployer.deploy(
2123
artifacts.require('CPKFactory'),
2224
artifacts.require('GnosisSafeProxyFactory').address,

test/ethers/shouldWorkWithEthers.ts

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,7 @@ export function shouldWorkWithEthers({
126126
let networks: NetworksConfig
127127

128128
before('obtain addresses from artifacts', async () => {
129-
const { gnosisSafe, gnosisSafe2, cpkFactory, multiSend, defaultCallbackHandler } = contracts
129+
const { gnosisSafe, gnosisSafe2, cpkFactory, cpkFactoryV1, multiSend, defaultCallbackHandler } = contracts
130130

131131
networks = {
132132
[(await signer.provider.getNetwork()).chainId]: {
@@ -136,12 +136,11 @@ export function shouldWorkWithEthers({
136136
initialImplAddress: await cpkFactory.proxyImplSetter(),
137137
},
138138
{
139-
// TODO: Use v1 addr
140-
proxyFactoryAddress: cpkFactory.address,
139+
proxyFactoryAddress: cpkFactoryV1.address,
141140
initialImplAddress: gnosisSafe.address,
142141
},
143142
{
144-
proxyFactoryAddress: cpkFactory.address,
143+
proxyFactoryAddress: cpkFactoryV1.address,
145144
initialImplAddress: gnosisSafe2.address,
146145
},
147146
],

test/utils/contracts.ts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ const TruffleContract = require('@truffle/contract')
22
import Web3Maj1Min3 from 'web3-1-3'
33
import ConditionalTokensJson from '../../build/contracts/ConditionalTokens.json'
44
import CPKFactoryJson from '../../build/contracts/CPKFactory.json'
5+
import CPKFactoryV1Json from '../../build/contracts/CPKFactoryV1.json'
56
import DailyLimitModuleJson from '../../build/contracts/DailyLimitModule.json'
67
import DefaultCallbackHandlerJson from '../../build/contracts/DefaultCallbackHandler.json'
78
import ERC20MintableJson from '../../build/contracts/ERC20Mintable.json'
@@ -13,6 +14,7 @@ import MultistepJson from '../../build/contracts/Multistep.json'
1314
import { Address } from '../../src/utils/basicTypes'
1415

1516
let CPKFactory: any
17+
let CPKFactoryV1: any
1618
let GnosisSafe: any
1719
let GnosisSafe2: any
1820
let GnosisSafeProxyFactory: any
@@ -24,6 +26,7 @@ let ConditionalTokens: any
2426
let DailyLimitModule: any
2527

2628
let cpkFactory: any
29+
let cpkFactoryV1: any
2730
let gnosisSafe: any
2831
let gnosisSafe2: any
2932
let gnosisSafeProxyFactory: any
@@ -36,6 +39,7 @@ let dailyLimitModule: any
3639

3740
export interface TestContractInstances {
3841
cpkFactory: any
42+
cpkFactoryV1: any
3943
gnosisSafe: any
4044
gnosisSafe2: any
4145
gnosisSafeProxyFactory: any
@@ -49,6 +53,7 @@ export interface TestContractInstances {
4953

5054
export interface TestContracts {
5155
CPKFactory: any
56+
CPKFactoryV1: any
5257
GnosisSafe: any
5358
GnosisSafe2: any
5459
GnosisSafeProxyFactory: any
@@ -68,6 +73,11 @@ export const initializeContracts = async (safeOwner: Address): Promise<void> =>
6873
CPKFactory.defaults({ from: safeOwner })
6974
cpkFactory = await CPKFactory.deployed()
7075

76+
CPKFactoryV1 = TruffleContract(CPKFactoryV1Json)
77+
CPKFactoryV1.setProvider(provider)
78+
CPKFactoryV1.defaults({ from: safeOwner })
79+
cpkFactoryV1 = await CPKFactoryV1.deployed()
80+
7181
GnosisSafe = TruffleContract(GnosisSafeJson)
7282
GnosisSafe.setProvider(provider)
7383
GnosisSafe.defaults({ from: safeOwner })
@@ -116,6 +126,7 @@ export const initializeContracts = async (safeOwner: Address): Promise<void> =>
116126

117127
export const getContracts = (): TestContracts => ({
118128
CPKFactory,
129+
CPKFactoryV1,
119130
GnosisSafe,
120131
GnosisSafe2,
121132
GnosisSafeProxyFactory,
@@ -129,6 +140,7 @@ export const getContracts = (): TestContracts => ({
129140

130141
export const getContractInstances = (): TestContractInstances => ({
131142
cpkFactory,
143+
cpkFactoryV1,
132144
gnosisSafe,
133145
gnosisSafe2,
134146
gnosisSafeProxyFactory,

test/web3/shouldWorkWithWeb3.ts

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,7 @@ export function shouldWorkWithWeb3({
114114
let networks: NetworksConfig
115115

116116
before('obtain addresses from artifacts', async () => {
117-
const { gnosisSafe, gnosisSafe2, cpkFactory, multiSend, defaultCallbackHandler } = contracts
117+
const { gnosisSafe, gnosisSafe2, cpkFactory, cpkFactoryV1, multiSend, defaultCallbackHandler } = contracts
118118

119119
networks = {
120120
[await ueb3.eth.net.getId()]: {
@@ -124,12 +124,11 @@ export function shouldWorkWithWeb3({
124124
initialImplAddress: await cpkFactory.proxyImplSetter(),
125125
},
126126
{
127-
// TODO: Use v1 addr
128-
proxyFactoryAddress: cpkFactory.address,
127+
proxyFactoryAddress: cpkFactoryV1.address,
129128
initialImplAddress: gnosisSafe.address,
130129
},
131130
{
132-
proxyFactoryAddress: cpkFactory.address,
131+
proxyFactoryAddress: cpkFactoryV1.address,
133132
initialImplAddress: gnosisSafe2.address,
134133
},
135134
],

0 commit comments

Comments
 (0)