* `@0x/contract-wrappers`: Regenerate wrappers using updated abi-gen Update tools deps * update deps to hopefully fix doc gen
		
			
				
	
	
		
			101 lines
		
	
	
		
			4.8 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			101 lines
		
	
	
		
			4.8 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
import { blockchainTests, expect, verifyEventsFromLogs } from '@0x/contracts-test-utils';
 | 
						|
import { BigNumber, hexUtils } from '@0x/utils';
 | 
						|
 | 
						|
import { artifacts } from './artifacts';
 | 
						|
import {
 | 
						|
    PermissionlessTransformerDeployerContract,
 | 
						|
    PermissionlessTransformerDeployerEvents,
 | 
						|
    TestPermissionlessTransformerDeployerTransformerContract,
 | 
						|
} from './wrappers';
 | 
						|
 | 
						|
blockchainTests.resets('PermissionlessTransformerDeployer', env => {
 | 
						|
    let sender: string;
 | 
						|
    let deployer: PermissionlessTransformerDeployerContract;
 | 
						|
    const deployBytes = artifacts.TestPermissionlessTransformerDeployerTransformer.compilerOutput.evm.bytecode.object;
 | 
						|
 | 
						|
    before(async () => {
 | 
						|
        [, sender] = await env.getAccountAddressesAsync();
 | 
						|
        deployer = await PermissionlessTransformerDeployerContract.deployFrom0xArtifactAsync(
 | 
						|
            artifacts.PermissionlessTransformerDeployer,
 | 
						|
            env.provider,
 | 
						|
            env.txDefaults,
 | 
						|
            artifacts,
 | 
						|
        );
 | 
						|
    });
 | 
						|
 | 
						|
    describe('deploy()', () => {
 | 
						|
        it('can deploy safe contract', async () => {
 | 
						|
            const salt = hexUtils.random();
 | 
						|
            const targetAddress = await deployer.deploy(deployBytes, salt).callAsync();
 | 
						|
            const target = new TestPermissionlessTransformerDeployerTransformerContract(targetAddress, env.provider);
 | 
						|
            const receipt = await deployer.deploy(deployBytes, salt).awaitTransactionSuccessAsync({ from: sender });
 | 
						|
            expect(await target.deployer().callAsync()).to.eq(deployer.address);
 | 
						|
            verifyEventsFromLogs(
 | 
						|
                receipt.logs,
 | 
						|
                [{ deployedAddress: targetAddress, salt, sender }],
 | 
						|
                PermissionlessTransformerDeployerEvents.Deployed,
 | 
						|
            );
 | 
						|
        });
 | 
						|
 | 
						|
        it('deploys at predictable address', async () => {
 | 
						|
            const salt = hexUtils.random();
 | 
						|
            const targetAddress = await deployer.deploy(deployBytes, salt).callAsync();
 | 
						|
            const initCodeHash = hexUtils.hash(deployBytes);
 | 
						|
            const expectedAddress = hexUtils.slice(
 | 
						|
                hexUtils.hash(hexUtils.concat('0xFF', deployer.address, salt, initCodeHash)),
 | 
						|
                12,
 | 
						|
            );
 | 
						|
 | 
						|
            expect(targetAddress).to.eq(expectedAddress);
 | 
						|
        });
 | 
						|
 | 
						|
        it('cannot deploy suicidal contract', async () => {
 | 
						|
            const suicidalDeployBytes =
 | 
						|
                artifacts.TestPermissionlessTransformerDeployerSuicidal.compilerOutput.evm.bytecode.object;
 | 
						|
 | 
						|
            const tx = deployer.deploy(suicidalDeployBytes, hexUtils.random()).awaitTransactionSuccessAsync();
 | 
						|
            expect(tx).to.revertWith('PermissionlessTransformerDeployer/UNSAFE_CODE');
 | 
						|
        });
 | 
						|
 | 
						|
        it('can deploy safe contract with value', async () => {
 | 
						|
            const salt = hexUtils.random();
 | 
						|
            const targetAddress = await deployer.deploy(deployBytes, salt).callAsync({ from: sender, value: 1 });
 | 
						|
            const target = new TestPermissionlessTransformerDeployerTransformerContract(targetAddress, env.provider);
 | 
						|
            const receipt = await deployer
 | 
						|
                .deploy(deployBytes, salt)
 | 
						|
                .awaitTransactionSuccessAsync({ from: sender, value: 1 });
 | 
						|
            expect(await target.deployer().callAsync()).to.eq(deployer.address);
 | 
						|
            verifyEventsFromLogs(
 | 
						|
                receipt.logs,
 | 
						|
                [{ deployedAddress: targetAddress, salt, sender }],
 | 
						|
                PermissionlessTransformerDeployerEvents.Deployed,
 | 
						|
            );
 | 
						|
            expect(await env.web3Wrapper.getBalanceInWeiAsync(targetAddress)).to.bignumber.eq(1);
 | 
						|
        });
 | 
						|
 | 
						|
        it('reverts if constructor throws', async () => {
 | 
						|
            const CONSTRUCTOR_FAIL_VALUE = new BigNumber(3333);
 | 
						|
            const tx = deployer
 | 
						|
                .deploy(deployBytes, hexUtils.random())
 | 
						|
                .callAsync({ value: CONSTRUCTOR_FAIL_VALUE, from: sender });
 | 
						|
            return expect(tx).to.revertWith('PermissionlessTransformerDeployer/DEPLOY_FAILED');
 | 
						|
        });
 | 
						|
 | 
						|
        it('can retrieve deployment salt from contract address', async () => {
 | 
						|
            const salt = hexUtils.random();
 | 
						|
            const targetAddress = await deployer.deploy(deployBytes, salt).callAsync({ from: sender });
 | 
						|
            await deployer.deploy(deployBytes, salt).awaitTransactionSuccessAsync({ from: sender });
 | 
						|
            expect(await deployer.toDeploymentSalt(targetAddress).callAsync()).to.eq(salt);
 | 
						|
        });
 | 
						|
 | 
						|
        it('can retrieve deployment init code hash from contract address', async () => {
 | 
						|
            const salt = hexUtils.random();
 | 
						|
            const targetAddress = await deployer.deploy(deployBytes, salt).callAsync({ from: sender });
 | 
						|
            await deployer.deploy(deployBytes, salt).awaitTransactionSuccessAsync({ from: sender });
 | 
						|
            expect(hexUtils.toHex(await deployer.toInitCodeHash(targetAddress).callAsync())).to.eq(
 | 
						|
                hexUtils.hash(deployBytes),
 | 
						|
            );
 | 
						|
        });
 | 
						|
    });
 | 
						|
});
 |