julien/lovepublic Fork 0
1a71b77
Commits
Clone
git clone https://git.rickub.com/julien/love.git
git clone ssh://git@rickub.com/julien/love.git

Host key fingerprint (ed25519): SHA256:iycHnxEyq0Q7uyVpB7JlznP0G7JrTPXLYRcAU5CSLhc — verify it before your first connect.

trim readme

julienbrg committed 2026-09-17T21:11:31+02:00 Browse files
1a71b77 parent: 1c407d3
modified README.md +18 -61
@@ -1,55 +1,31 @@
1-# love
1+# Love
22
3-A [Foundry](https://getfoundry.sh) project.
3+The official LOVE token.
44
5-`Love` (`LOVE`, 18 decimals) is a basic ERC-20 built on
6-[OpenZeppelin](https://github.com/OpenZeppelin/openzeppelin-contracts), with one
7-deliberate twist: `mint` has **no access control**.
8-
9-```solidity
10-function mint(address to, uint256 amount) external;
11-```
12-
13-Anyone can mint any amount to any address. Supply starts at zero and is
14-unbounded, so the token carries no economic value — it is a faucet / demo token.
15-Do not deploy it to mainnet expecting otherwise.
16-
17-## Setup
5+## Install
186
197 ```shell
208 forge install
219 cp .env.example .env
2210 ```
2311
24-## Usage
12+## Build & test
2513
2614 ```shell
2715 forge build # compile
2816 forge test # run tests
2917 forge test -vvv # with traces
3018 forge fmt # format
31-forge coverage # coverage report
32-forge snapshot # gas snapshot
3319 anvil # local node
3420 ```
3521
3622 ## Deploy
3723
38-`Love` is deployed with CREATE2 through the canonical
39-[deterministic deployer](https://github.com/Arachnid/deterministic-deployment-proxy)
40-at `0x4e59b44847b379578588920cA78FbF26c0B4956C`, so it gets **the same address on
41-every EVM network**. The address derives from the salt and the creation code
42-only — not from the deployer account or its nonce.
43-
44-Check the address before spending gas:
24+Deployment uses CREATE2, so the token has the same address on every EVM network.
4525
4626 ```shell
47-forge script script/Love.s.sol:LoveScript --sig 'predict()'
48-```
27+forge script script/Love.s.sol:LoveScript --sig 'predict()' # print the address
4928
50-Then deploy:
51-
52-```shell
5329 forge script script/Love.s.sol:LoveScript \
5430 --rpc-url base_sepolia \
5531 --account "$DEPLOYER_ACCOUNT" \
@@ -57,37 +33,6 @@ forge script script/Love.s.sol:LoveScript \
5733 --verify
5834 ```
5935
60-Drop `--broadcast` for a dry run. Re-running against a network where the token
61-already exists is a no-op.
62-
63-The salt defaults to `keccak256("LOVE")`; override it — to mine a vanity address,
64-say — with `SALT=0x… forge script …`. The same salt must be used on every
65-network.
66-
67-### Keeping the address stable
68-
69-The creation code, and therefore the address, changes if any of these change:
70-
71-- the contract source (`src/Love.sol`) or its OpenZeppelin version,
72-- `solc` (pinned to 0.8.30 in `foundry.toml`),
73-- optimizer settings (`optimizer = true`, `optimizer_runs = 200`, `via_ir = false`),
74-- `bytecode_hash` (set to `none`, which keeps the metadata hash out of the
75- bytecode so paths and compiler metadata don't leak into the address).
76-
77-Treat those as frozen once the token is deployed anywhere.
78-
79-Chains lacking the deterministic deployer — zkSync-style chains in particular,
80-where CREATE2 addresses are computed differently — cannot match this address.
81-
82-## Layout
83-
84-| Path | Contents |
85-| --------- | ------------------- |
86-| `src/` | Contracts |
87-| `test/` | Tests |
88-| `script/` | Deployment scripts |
89-| `lib/` | Dependencies |
90-
9136 ## Mint
9237
9338 ```shell
@@ -95,3 +40,15 @@ cast send <LOVE_ADDRESS> "mint(address,uint256)" <RECIPIENT> 1000000000000000000
9540 --rpc-url base_sepolia \
9641 --account "$DEPLOYER_ACCOUNT"
9742 ```
43+
44+## License
45+
46+GPL-3.0
47+
48+## Contact
49+
50+**Julien Béranger** ([GitHub](https://github.com/julienbrg))
51+
52+- Element: [@julienbrg:matrix.org](https://matrix.to/#/@julienbrg:matrix.org)
53+- Farcaster: [julien-](https://warpcast.com/julien-)
54+- Telegram: [@julienbrg](https://t.me/julienbrg)
@@ -1,55 +1,31 @@
1-# love1+# Love
2 2
3-A [Foundry](https://getfoundry.sh) project.3+The official LOVE token.
4 4
5-`Love` (`LOVE`, 18 decimals) is a basic ERC-20 built on5+## Install
6-[OpenZeppelin](https://github.com/OpenZeppelin/openzeppelin-contracts), with one
7-deliberate twist: `mint` has **no access control**.
8-
9-```solidity
10-function mint(address to, uint256 amount) external;
11-```
12-
13-Anyone can mint any amount to any address. Supply starts at zero and is
14-unbounded, so the token carries no economic value — it is a faucet / demo token.
15-Do not deploy it to mainnet expecting otherwise.
16-
17-## Setup
18 6
19 ```shell7 ```shell
20 forge install8 forge install
21 cp .env.example .env9 cp .env.example .env
22 ```10 ```
23 11
24-## Usage12+## Build & test
25 13
26 ```shell14 ```shell
27 forge build # compile15 forge build # compile
28 forge test # run tests16 forge test # run tests
29 forge test -vvv # with traces17 forge test -vvv # with traces
30 forge fmt # format18 forge fmt # format
31-forge coverage # coverage report
32-forge snapshot # gas snapshot
33 anvil # local node19 anvil # local node
34 ```20 ```
35 21
36 ## Deploy22 ## Deploy
37 23
38-`Love` is deployed with CREATE2 through the canonical24+Deployment uses CREATE2, so the token has the same address on every EVM network.
39-[deterministic deployer](https://github.com/Arachnid/deterministic-deployment-proxy)
40-at `0x4e59b44847b379578588920cA78FbF26c0B4956C`, so it gets **the same address on
41-every EVM network**. The address derives from the salt and the creation code
42-only — not from the deployer account or its nonce.
43-
44-Check the address before spending gas:
45 25
46 ```shell26 ```shell
47-forge script script/Love.s.sol:LoveScript --sig 'predict()'27+forge script script/Love.s.sol:LoveScript --sig 'predict()' # print the address
48-```
49 28
50-Then deploy:
51-
52-```shell
53 forge script script/Love.s.sol:LoveScript \29 forge script script/Love.s.sol:LoveScript \
54 --rpc-url base_sepolia \30 --rpc-url base_sepolia \
55 --account "$DEPLOYER_ACCOUNT" \31 --account "$DEPLOYER_ACCOUNT" \
@@ -57,37 +33,6 @@ forge script script/Love.s.sol:LoveScript \
57 --verify33 --verify
58 ```34 ```
59 35
60-Drop `--broadcast` for a dry run. Re-running against a network where the token
61-already exists is a no-op.
62-
63-The salt defaults to `keccak256("LOVE")`; override it — to mine a vanity address,
64-say — with `SALT=0x… forge script …`. The same salt must be used on every
65-network.
66-
67-### Keeping the address stable
68-
69-The creation code, and therefore the address, changes if any of these change:
70-
71-- the contract source (`src/Love.sol`) or its OpenZeppelin version,
72-- `solc` (pinned to 0.8.30 in `foundry.toml`),
73-- optimizer settings (`optimizer = true`, `optimizer_runs = 200`, `via_ir = false`),
74-- `bytecode_hash` (set to `none`, which keeps the metadata hash out of the
75- bytecode so paths and compiler metadata don't leak into the address).
76-
77-Treat those as frozen once the token is deployed anywhere.
78-
79-Chains lacking the deterministic deployer — zkSync-style chains in particular,
80-where CREATE2 addresses are computed differently — cannot match this address.
81-
82-## Layout
83-
84-| Path | Contents |
85-| --------- | ------------------- |
86-| `src/` | Contracts |
87-| `test/` | Tests |
88-| `script/` | Deployment scripts |
89-| `lib/` | Dependencies |
90-
91 ## Mint36 ## Mint
92 37
93 ```shell38 ```shell
@@ -95,3 +40,15 @@ cast send <LOVE_ADDRESS> "mint(address,uint256)" <RECIPIENT> 1000000000000000000
95 --rpc-url base_sepolia \40 --rpc-url base_sepolia \
96 --account "$DEPLOYER_ACCOUNT"41 --account "$DEPLOYER_ACCOUNT"
97 ```42 ```
43+
44+## License
45+
46+GPL-3.0
47+
48+## Contact
49+
50+**Julien Béranger** ([GitHub](https://github.com/julienbrg))
51+
52+- Element: [@julienbrg:matrix.org](https://matrix.to/#/@julienbrg:matrix.org)
53+- Farcaster: [julien-](https://warpcast.com/julien-)
54+- Telegram: [@julienbrg](https://t.me/julienbrg)