This repository has been archived by the owner on Feb 20, 2024. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 6
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #14 from LayerXcom/feature/crosschain-atomic-swap-…
…cordapp feature/crosschain atomic swap cordapp
- Loading branch information
Showing
65 changed files
with
7,073 additions
and
4 deletions.
There are no files selected for viewing
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Oops, something went wrong.
15 changes: 15 additions & 0 deletions
15
.idea/runConfigurations/cross_chain_atomic_swap_cordapp.xml
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Oops, something went wrong.
15 changes: 15 additions & 0 deletions
15
.idea/runConfigurations/flow_ethereum_event_watch_test.xml
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Oops, something went wrong.
Empty file.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,56 @@ | ||
{ | ||
"extends" : [ | ||
"standard", | ||
"plugin:promise/recommended" | ||
], | ||
"plugins": [ | ||
"mocha-no-only", | ||
"promise" | ||
], | ||
"env": { | ||
"node" : true, | ||
"mocha" : true | ||
}, | ||
"globals" : { | ||
"artifacts": false, | ||
"contract": false, | ||
"assert": false, | ||
"web3": false | ||
}, | ||
"rules": { | ||
|
||
// Strict mode | ||
"strict": ["error", "global"], | ||
|
||
// Code style | ||
"camelcase": ["error", {"properties": "always"}], | ||
"comma-dangle": ["error", "always-multiline"], | ||
"comma-spacing": ["error", {"before": false, "after": true}], | ||
"dot-notation": ["error", {"allowKeywords": true, "allowPattern": ""}], | ||
"eol-last": ["error", "always"], | ||
"eqeqeq": ["error", "smart"], | ||
"generator-star-spacing": ["error", "before"], | ||
"indent": ["error", 2], | ||
"linebreak-style": ["error", "unix"], | ||
"max-len": ["error", 170, 2], | ||
"no-debugger": "off", | ||
"no-dupe-args": "error", | ||
"no-dupe-keys": "error", | ||
"no-mixed-spaces-and-tabs": ["error", "smart-tabs"], | ||
"no-redeclare": ["error", {"builtinGlobals": true}], | ||
"no-trailing-spaces": ["error", { "skipBlankLines": false }], | ||
"no-undef": "error", | ||
"no-use-before-define": "off", | ||
"no-var": "error", | ||
"object-curly-spacing": ["error", "always"], | ||
"prefer-const": "error", | ||
"quotes": ["error", "single"], | ||
"semi": ["error", "always"], | ||
"space-before-function-paren": ["error", "always"], | ||
|
||
"mocha-no-only/mocha-no-only": ["error"], | ||
|
||
"promise/always-return": "off", | ||
"promise/avoid-new": "off" | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,2 @@ | ||
node_modules | ||
build |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,6 @@ | ||
{ | ||
"extends": "solhint:default", | ||
"rules": { | ||
"max-line-length": ["error", 150] | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,67 @@ | ||
# Atomic Swap Ethereum Environment | ||
This manages ethereum environments for [Cross-Chain Atomic Swap Cordapp](../cross-chain-atomic-swap-cordapp). | ||
You can deploy the [Settlement](contracts/Settlement.sol) contract. | ||
|
||
## Dependencies | ||
- Node.js v12 (Required) | ||
- yarn (Optional but recommended) | ||
|
||
## Usage | ||
Install npm dependencies | ||
``` | ||
yarn | ||
``` | ||
|
||
Run local ethereum network | ||
``` | ||
yarn network | ||
``` | ||
|
||
Deploy SimpleStorage smart contract | ||
``` | ||
yarn truffle migrate --network local | ||
``` | ||
|
||
### Ethereum addresses and private keys | ||
**DO NOT USE IN PRODUCTION** | ||
|
||
``` | ||
Available Accounts | ||
================== | ||
(0) 0x90F8bf6A479f320ead074411a4B0e7944Ea8c9C1 (100 ETH) Participant C (Security Issuer) | ||
(1) 0xFFcf8FDEE72ac11b5c542428B35EEF5769C409f0 (100 ETH) Participant A | ||
(2) 0x22d491Bde2303f2f43325b2108D26f1eAbA1e32b (100 ETH) Participant B | ||
(3) 0xE11BA2b4D45Eaed5996Cd0823791E0C93114882d (100 ETH) Notary | ||
(4) 0xd03ea8624C8C5987235048901fB614fDcA89b117 (100 ETH) | ||
(5) 0x95cED938F7991cd0dFcb48F0a06a40FA1aF46EBC (100 ETH) | ||
(6) 0x3E5e9111Ae8eB78Fe1CC3bb8915d5D461F3Ef9A9 (100 ETH) | ||
(7) 0x28a8746e75304c0780E011BEd21C72cD78cd535E (100 ETH) | ||
(8) 0xACa94ef8bD5ffEE41947b4585a84BdA5a3d3DA6E (100 ETH) | ||
(9) 0x1dF62f291b2E969fB0849d99D9Ce41e2F137006e (100 ETH) | ||
Private Keys | ||
================== | ||
(0) 0x4f3edf983ac636a65a842ce7c78d9aa706d3b113bce9c46f30d7d21715b23b1d Participant C (Security Issuer) | ||
(1) 0x6cbed15c793ce57650b9877cf6fa156fbef513c4e6134f022a85b1ffdd59b2a1 Participant A | ||
(2) 0x6370fd033278c143179d81c5526140625662b8daa446c22ee2d73db3707e620c Participant B | ||
(3) 0x646f1ce2fdad0e6deeeb5c7e8e5543bdde65e86029e2fd9fc169899c440a7913 Notary | ||
(4) 0xadd53f9a7e588d003326d1cbf9e4a43c061aadd9bc938c843a79e7b4fd2ad743 | ||
(5) 0x395df67f0c2d2d9fe1ad08d1bc8b6627011959b79c53d7dd6a3536a33ab8a4fd | ||
(6) 0xe485d098507f54e7733a205420dfddbe58db035fa577fc294ebd14db90767a52 | ||
(7) 0xa453611d9419d0e56f499079478fd72c37b251a94bfde4d19872c44cf65386e3 | ||
(8) 0x829e924fdf021ba3dbbc4225edfece9aca04b929d6e75613329ca6f1d31c0bb4 | ||
(9) 0xb0057716d5917badaf911b193b12b910811c1497b5bada8d7711f758981c3773 | ||
``` | ||
|
||
### Truffle console | ||
Log in to truffle console | ||
``` | ||
yarn truffle console --network local | ||
``` | ||
|
||
Get ether balances | ||
``` | ||
web3.eth.getBalance('0xFFcf8FDEE72ac11b5c542428B35EEF5769C409f0') // Participant A | ||
web3.eth.getBalance('0x22d491Bde2303f2f43325b2108D26f1eAbA1e32b') // Participant B | ||
web3.eth.getBalance(Settlement.address) // Settlement contract | ||
``` |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,19 @@ | ||
pragma solidity >=0.4.21 <0.7.0; | ||
|
||
|
||
contract Migrations { | ||
address public owner; | ||
uint256 public last_completed_migration; | ||
|
||
constructor() public { | ||
owner = msg.sender; | ||
} | ||
|
||
modifier restricted() { | ||
if (msg.sender == owner) _; | ||
} | ||
|
||
function setCompleted(uint256 completed) public restricted { | ||
last_completed_migration = completed; | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,94 @@ | ||
pragma solidity >=0.4.21 <0.7.0; | ||
pragma experimental ABIEncoderV2; | ||
|
||
import "openzeppelin-solidity/contracts/ownership/Ownable.sol"; | ||
|
||
contract Settlement is Ownable { | ||
enum SwapStatus { | ||
Nonexistent, | ||
Locked, | ||
Unlocked | ||
} | ||
|
||
struct SwapDetail { | ||
address payable transferFromAddress; | ||
address payable transferToAddress; | ||
uint256 weiAmount; | ||
uint256 securityAmount; | ||
SwapStatus status; | ||
} | ||
|
||
address cordaNotary; | ||
mapping(string => SwapDetail) public swapIdToDetailMap; | ||
uint256 settlementId; | ||
|
||
event Locked( | ||
uint256 settlementId, | ||
string swapId, | ||
bytes encodedSwapDetail | ||
); | ||
|
||
event Unlocked( | ||
uint256 settlementId, | ||
string swapId, | ||
bytes encodedSwapDetail | ||
); | ||
|
||
constructor(address _cordaNotary) public { | ||
cordaNotary = _cordaNotary; | ||
settlementId = 1; | ||
} | ||
|
||
modifier onlyCordaNotary { | ||
require(msg.sender == cordaNotary, "caller is not the corda notary"); | ||
_; | ||
} | ||
|
||
function lock( | ||
string memory _swapId, | ||
address payable _transferFromAddress, | ||
address payable _transferToAddress, | ||
uint256 _weiAmount, | ||
uint256 _securityAmount | ||
) public payable { | ||
require(msg.sender == _transferFromAddress, "msg.sender is not _transferFromAddress"); | ||
require(msg.value == _weiAmount, "msg.value is not equivalent to _weiAmount"); | ||
|
||
SwapDetail storage swapDetail = swapIdToDetailMap[_swapId]; | ||
swapDetail.transferFromAddress = _transferFromAddress; | ||
swapDetail.transferToAddress = _transferToAddress; | ||
swapDetail.weiAmount = _weiAmount; | ||
swapDetail.securityAmount = _securityAmount; | ||
swapDetail.status = SwapStatus.Locked; | ||
|
||
bytes memory encodedSwapDetail = abi.encode(swapDetail); | ||
|
||
emit Locked( | ||
settlementId++, | ||
_swapId, | ||
encodedSwapDetail | ||
); | ||
} | ||
|
||
function unlock( | ||
string memory _swapId | ||
) public onlyCordaNotary { | ||
SwapDetail storage swapDetail = swapIdToDetailMap[_swapId]; | ||
|
||
require(swapDetail.status != SwapStatus.Nonexistent, "swapDetail does not exist"); | ||
require(swapDetail.status == SwapStatus.Locked, "swapDetail.status is not Locked"); | ||
|
||
// Try sending wei to targetAddress. | ||
require(swapDetail.transferToAddress.send(swapDetail.weiAmount)); | ||
|
||
swapDetail.status = SwapStatus.Unlocked; | ||
|
||
bytes memory encodedSwapDetail = abi.encode(swapDetail); | ||
|
||
emit Unlocked( | ||
settlementId++, | ||
_swapId, | ||
encodedSwapDetail | ||
); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
const Migrations = artifacts.require('Migrations'); | ||
|
||
module.exports = deployer => { | ||
deployer.deploy(Migrations); | ||
}; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,6 @@ | ||
const Settlement = artifacts.require('Settlement'); | ||
|
||
module.exports = async (deployer, network, accounts) => { | ||
const notaryAddress = accounts[3]; | ||
await deployer.deploy(Settlement, notaryAddress); | ||
}; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,37 @@ | ||
{ | ||
"name": "atomic-swap-ethereum-env", | ||
"version": "0.1.0", | ||
"description": "", | ||
"main": "index.js", | ||
"scripts": { | ||
"test": "truffle test", | ||
"network": "ganache-cli -i 5777 -b 1 -l 100000000 -m 'myth like bonus scare over problem client lizard pioneer submit female collect'", | ||
"lint": "yarn lint:sol && yarn lint:js", | ||
"lint:sol": "solhint --max-warnings 0 \"contracts/**/*.sol\"", | ||
"lint:js": "eslint migrations/*.js test/**/*.js scripts/*.js", | ||
"format": "yarn format:sol && yarn format:js", | ||
"format:sol": "prettier --write **/*.sol", | ||
"format:js": "eslint migrations/*.js test/**/*.js scripts/*.js --fix" | ||
}, | ||
"author": "LayerX Inc.", | ||
"license": "Apache-2.0", | ||
"dependencies": { | ||
"openzeppelin-solidity": "2.3.0", | ||
"ganache-cli": "^6.9.1", | ||
"truffle": "^5.1.14" | ||
}, | ||
"devDependencies": { | ||
"chai": "^4.2.0", | ||
"chai-bn": "^0.2.0", | ||
"eslint": "^6.8.0", | ||
"eslint-config-standard": "^14.1.0", | ||
"eslint-plugin-import": "^2.20.1", | ||
"eslint-plugin-mocha-no-only": "^1.1.0", | ||
"eslint-plugin-node": "^11.0.0", | ||
"eslint-plugin-promise": "^4.2.1", | ||
"eslint-plugin-standard": "^4.0.1", | ||
"prettier-plugin-solidity": "^1.0.0-alpha.44", | ||
"solhint": "^3.0.0-rc.5", | ||
"truffle-assertions": "^0.9.2" | ||
} | ||
} |
10 changes: 10 additions & 0 deletions
10
atomic-swap-ethereum-env/scripts/getContractAddressAndCode.js
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,10 @@ | ||
const Settlement = artifacts.require('Settlement'); | ||
|
||
module.exports = async done => { | ||
const settlement = await Settlement.deployed(); | ||
const address = settlement.address; | ||
const code = await web3.eth.getCode(address); | ||
console.log(address); | ||
console.log(code); | ||
done(); | ||
}; |
Oops, something went wrong.