Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save slashbinslashnoname/af4a3a7019bc5e5f37aa7cefe0e68a24 to your computer and use it in GitHub Desktop.
Save slashbinslashnoname/af4a3a7019bc5e5f37aa7cefe0e68a24 to your computer and use it in GitHub Desktop.
Smartcontract cours
https://remix.ethereum.org/?#code=Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgXjAuOC4yMDsKCmltcG9ydCAiQG9wZW56ZXBwZWxpbi9jb250cmFjdHNANS4wLjEvdG9rZW4vRVJDMjAvRVJDMjAuc29sIjsKaW1wb3J0ICJAb3BlbnplcHBlbGluL2NvbnRyYWN0c0A1LjAuMS90b2tlbi9FUkMyMC9leHRlbnNpb25zL0VSQzIwRmxhc2hNaW50LnNvbCI7Cgpjb250cmFjdCBTb2xWaW9sZXR0ZSBpcyBFUkMyMCwgRVJDMjBGbGFzaE1pbnQgewogICAgY29uc3RydWN0b3IoKSBFUkMyMCgiU29sIFZpb2xldHRlIiwgIlNPTCIpIHsKICAgICAgICBfbWludChtc2cuc2VuZGVyLCA1MDAwMDAgKiAxMCAqKiBkZWNpbWFscygpKTsKICAgIH0KfQo&lang=en&optimize=false&runs=200&evmVersion=null&version=soljson-v0.8.22+commit.4fc1097e.js
```
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;
import "@openzeppelin/contracts@5.0.1/token/ERC20/ERC20.sol";
import "@openzeppelin/contracts@5.0.1/token/ERC20/extensions/ERC20FlashMint.sol";
contract BordeauxCoin is ERC20, ERC20FlashMint {
constructor() ERC20("Bordeaux Coin", "BDX") {
_mint(msg.sender, 500 * 10 ** decimals()); // Je me verse 500 jetons avec 18 décimales
}
}
contract ToulouseCoin is ERC20, ERC20FlashMint {
constructor() ERC20("Toulouse Coin", "TLSE") {
_mint(msg.sender, 500 * 10 ** decimals()); // Je me verse 500 jetons avec 18 décimales
}
}
```
Smartcontract swap entre deux
(approve d'abord pour le montant que l'on souhaite transférer, puis swap)
```
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;
import "https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.0.0/contracts/token/ERC20/IERC20.sol";
/*
How to swap tokens
1. Alice has 100 tokens from BordeauxCoin, which is a ERC20 token.
2. Bob has 100 tokens from ToulouseCoin, which is also a ERC20 token.
3. Alice and Bob wants to trade 10 BordeauxCoin for 20 ToulouseCoin.
4. Alice or Bob deploys TokenSwap
5. Alice approves TokenSwap to withdraw 10 tokens from BordeauxCoin
6. Bob approves TokenSwap to withdraw 20 tokens from ToulouseCoin
7. Alice or Bob calls TokenSwap.swap()
8. Alice and Bob traded tokens successfully.
*/
contract TokenSwap {
IERC20 public token1;
address public owner1;
uint public amount1;
IERC20 public token2;
address public owner2;
uint public amount2;
constructor(
address _token1,
address _owner1,
uint _amount1,
address _token2,
address _owner2,
uint _amount2
) {
token1 = IERC20(_token1);
owner1 = _owner1;
amount1 = _amount1;
token2 = IERC20(_token2);
owner2 = _owner2;
amount2 = _amount2;
}
function swap() public {
require(msg.sender == owner1 || msg.sender == owner2, "Not authorized");
require(
token1.allowance(owner1, address(this)) >= amount1,
"Token 1 allowance too low"
);
require(
token2.allowance(owner2, address(this)) >= amount2,
"Token 2 allowance too low"
);
_safeTransferFrom(token1, owner1, owner2, amount1);
_safeTransferFrom(token2, owner2, owner1, amount2);
}
function _safeTransferFrom(
IERC20 token,
address sender,
address recipient,
uint amount
) private {
bool sent = token.transferFrom(sender, recipient, amount);
require(sent, "Token transfer failed");
}
}
```
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment