Skip to content

Commit

Permalink
Replace full code with instances + link to code.
Browse files Browse the repository at this point in the history
Strip down lot of verbose
  • Loading branch information
alijnmerchant21 committed Dec 18, 2024
1 parent ebfadb2 commit 6ebee61
Showing 1 changed file with 20 additions and 101 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -9,130 +9,49 @@ Let's implement the deployment scripts. We'll need two scripts: one for deployme
## Create `script/Deploy.s.sol:`

```solidity
// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.8.25 <0.9.0;
import { Script } from "forge-std/Script.sol";
import { Registry } from "../src/Registry.sol";
import { OrderFactory } from "../src/OrderFactory.sol";
contract Deploy is Script {
address internal broadcaster;
address internal scheduler;
address internal factoryOwner;
address internal registryAddress;
error InvalidScheduler();
error InvalidFactory();
constructor() {
(broadcaster,) = deriveRememberKey({ mnemonic: vm.envString("MNEMONIC"), index: 0 });
scheduler = vm.envAddress("SCHEDULER_ADDRESS");
factoryOwner = vm.envAddress("FACTORY_OWNER_ADDRESS");
registryAddress = vm.envOr("REGISTRY_ADDRESS", address(0));
if (scheduler == address(0)) {
revert InvalidScheduler();
}
if (factoryOwner == address(0)) {
revert InvalidFactory();
}
}
function run() external {
vm.startBroadcast(broadcaster);
Registry registry;
if (registryAddress == address(0)) {
registry = new Registry();
} else {
registry = Registry(registryAddress);
}
new OrderFactory(address(registry), scheduler, factoryOwner);
// NEW: Optional registry reuse
Registry registry = registryAddress != address(0)
? Registry(registryAddress)
: new Registry();
new OrderFactory(
address(registry),
scheduler,
factoryOwner
);
vm.stopBroadcast();
}
}
```

[Code Reference](https://github.com/warden-protocol/wardenprotocol/blob/main/solidity/orders/script/Deploy.s.sol)

## Create `script/CreateOrder.s.sol:`

```solidity
// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.8.25 <0.9.0;
import { IWARDEN_PRECOMPILE_ADDRESS } from "precompile-warden/IWarden.sol";
import { ISLINKY_PRECOMPILE_ADDRESS } from "precompile-slinky/ISlinky.sol";
import { Script } from "forge-std/src/Script.sol";
import { Types as CommonTypes } from "precompile-common/Types.sol";
import { MockWardenPrecompile } from "../mocks/MockWardenPrecompile.sol";
import { MockSlinkyPrecompile } from "../mocks/MockSlinkyPrecompile.sol";
import { OrderFactory, OrderType } from "../src/OrderFactory.sol";
import { Types } from "../src/Types.sol";
contract CreateOrder is Script {
address internal broadcaster;
OrderFactory private immutable FACTORY;
error InvalidFactory();
constructor() {
(broadcaster,) = deriveRememberKey({ mnemonic: vm.envString("MNEMONIC"), index: 0 });
address factory = vm.envAddress("FACTORY_ADDRESS");
if (factory == address(0)) {
revert InvalidFactory();
}
FACTORY = OrderFactory(factory);
}
function run(
uint256 thresholdPrice,
Types.PriceCondition priceCondition,
Types.PricePair calldata pricePair,
Types.CreatorDefinedTxFields calldata creatorDefinedTxFields,
Types.SwapData calldata swapData,
uint64 keyId,
uint64 spaceNonce,
uint64 actionTimeoutHeight,
bytes calldata expectedApproveExpression,
bytes calldata expectedRejectExpression
)
external
{
// ... other parameters
) external {
// NEW: Setup mock services
MockSlinkyPrecompile mSlinkyPrecompile = new MockSlinkyPrecompile();
MockWardenPrecompile wPrecompile = new MockWardenPrecompile();
bytes[] memory analyzers = new bytes[](0);
bytes memory encryptionKey = new bytes(0);
Types.SignRequestData memory signRequestData = Types.SignRequestData({
keyId: keyId,
analyzers: analyzers,
encryptionKey: encryptionKey,
spaceNonce: spaceNonce,
actionTimeoutHeight: actionTimeoutHeight,
expectedApproveExpression: string(expectedApproveExpression),
expectedRejectExpression: string(expectedRejectExpression)
});
CommonTypes.Coin[] memory maxKeychainFees = new CommonTypes.Coin[](0);
Types.OrderData memory orderData = Types.OrderData({
thresholdPrice: thresholdPrice,
priceCondition: priceCondition,
pricePair: pricePair,
creatorDefinedTxFields: creatorDefinedTxFields,
swapData: swapData,
signRequestData: signRequestData
});
vm.etch(ISLINKY_PRECOMPILE_ADDRESS, address(mSlinkyPrecompile).code);
MockSlinkyPrecompile mockSlinkyPrecompile = MockSlinkyPrecompile(ISLINKY_PRECOMPILE_ADDRESS);
mockSlinkyPrecompile.setPrice(pricePair.base, pricePair.quote, thresholdPrice);
vm.etch(IWARDEN_PRECOMPILE_ADDRESS, address(wPrecompile).code);
vm.startBroadcast(broadcaster);
// Create order through factory
FACTORY.createOrder(orderData, maxKeychainFees, OrderType.Basic);
vm.stopBroadcast();
}
}
```

[Code Reference](https://github.com/warden-protocol/wardenprotocol/blob/main/solidity/orders/script/CreateOrder.s.sol)

### These scripts handle the following tasks

**Deploy.s.sol:**
Expand Down

0 comments on commit 6ebee61

Please sign in to comment.