1. 로컬 테스트넷 실행 $ anvil 2. 최상위 경로에 .env 파일 생성 PRIVATE_KEY= RPC_ENDPOINT=http://localhost:8545 이 때 PRIVATE\_KEY가 0x로 시작하면 파싱에서가 발생하므로 0x를 지워준 16진수값만 넣어줍니다. 3. 배포 코드 작성 cmd/deploy/main.go package main import ( "context" "crypto/ecdsa" "fmt" token "go-ethereum-example/gen" "math/big" "os" _ "github.com/joho/godotenv/autoload" "github.com/ethereum/go-ethereum/accounts/abi/bind" "github.com/ethereum/go..
1. 스마트 컨트랙트 contracts/MyToken.sol // SPDX-License-Identifier: GPL-3.0 pragma solidity ^0.8.19; import "@openzeppelin/contracts/token/ERC20/ERC20.sol"; contract MyToken is ERC20 { constructor(uint256 initialSupply) ERC20("MyToken", "MTK") { _mint(msg.sender, initialSupply); } } @openzeppelin/contracts 라이브러리의 ERC20.sol 컨트랙트를 상속하여 MyToken 컨트랙트를 작성 2. solc를 사용해 abi 및 binary 파일 생성 build 디렉토리 생성 $ mkd..
1. 사용한 기술 linux 환경 기반 go 1.21 (스마트 컨트랙트 배포 및 상호작용) node v20.3.0 (OpenZeppelin 라이브러리 사용) solc 0.8.22+commit.4fc1097e (Solidity 파일 컴파일) abigen 1.13.4-stable (abi 파일을 사용해 go 코드 생성) anvil 0.2.0 (로컬 테스트넷 실행 - ganache cli나 다른 로컬 테스트넷도 가능) alchemy (RPC Endpoint 제공) polygonscan (mumbai 테스트넷에 배포된 스마트 컨트랙트 검증) 2. solc 및 geth 설치 solc 설치 Installing the Solidity Compiler — Solidity 0.8.24 documentation Insta..
AggregatorV3Interface Chainlink에서 제공하는 Data Feeds 컨트랙트를 프록시 컨트랙트에서 호출하기 위해 필요한 인터페이스. 프록시 주소를 사용해 다음과 같이 인터페이스 객체를 생성하여 사용할 수 있다. /** * Network: Sepolia * Data Feed: ETH/USD * Address: 0x694AA1769357215DE4FAC081bf1f309aDC325306 */ constructor() { priceFeed = AggregatorV3Interface(0x694AA1769357215DE4FAC081bf1f309aDC325306); } AggregatorV3Interface 함수들 decimals 응답값의 소숫점 자릿수. 예를 들어, 8이 반환된 경우 응답은 ..
문제 1124번: 언더프라임 자연수 X를 소인수분해하면, 곱해서 X가 되는 소수의 목록을 얻을 수 있다. 예를 들어, 12 = 2 × 2 × 3이다. 1은 소수가 아니다. 어떤 수 X를 소인수분해 해서 구한 소수의 목록의 길이가 소수이면, www.acmicpc.net 자연수 X를 소인수분해하면, 곱해서 X가 되는 소수의 목록을 얻을 수 있다. 예를 들어, 12 = 2 × 2 × 3이다. 1은 소수가 아니다. 어떤 수 X를 소인수분해 해서 구한 소수의 목록의 길이가 소수이면, 그 수를 언더프라임 이라고 한다. 12는 목록에 포함된 소수의 개수가 3개이고, 3은 소수이니 12는 언더프라임이다. 두 정수 A와 B가 주어졌을 때, A보다 크거나 같고, B보다 작거나 같은 정수 중에서 언더프라임인 것의 개수를 구..
문제 24040번: 예쁜 케이크 Good Bye BOJ, 2021!이 열리는 오늘, 12월 31일은 종서의 생일이다. $N$ 명의 친구들은 종서에게 생일 선물로 예쁜 케이크를 만들어주려 한다. 여기에서, 예쁜 케이크는 다음과 같은 조건을 만족하는 www.acmicpc.net Good Bye BOJ, 2021!이 열리는 오늘, 12월 31일은 종서의 생일이다. N명의 친구들은 종서에게 생일 선물로 예쁜 케이크를 만들어주려 한다. 여기에서, 예쁜 케이크는 다음과 같은 조건을 만족하는 케이크를 의미한다. 케이크는 높이가 1$1$이고, 부피가 N인 직육면체 모양이다. 케이크를 적절히 칼질해서 한 변의 길이가 1인 정육면체 모양 조각 N개로 나눌 수 있어야 한다. 케이크의 옆면에 가로 너비가 1인 직사각형을 이어..
Foundry는 Solidity를 사용해 테스트를 작성합니다. 이 점에서 Javascript를 사용해야 하는 Truffle, Hardhat같은 툴체인과 차별점이 있습니다. 일반적으로 테스트는 'test' 디렉터리에 저장되며, '.t.sol' 확장자를 가집니다. 테스트 함수가 revert되면 테스트는 실패하는 것이고, 그 반대에는 테스트가 성공한 것으로 간주됩니다. 테스트 예제 Foundry 테스트는 Forge 표준 라이브러리의 'Test' 컨트랙트를 사용하여 작성할 수 있습니다. Test 컨트랙트는 기본적인 로깅과 어설션(assertion)을 제공합니다. pragma solidity ^0.8.13; import "forge-std/Test.sol"; contract ContractBTest is Test..
✨ Foundry 프로젝트 관련 명령어 프로젝트 생성 forge init 이미 git 저장소가 초기화되어 있는 디렉터리 안에서 Foundry 프로젝트를 생성하는 경우, '--no-commit' 플래그를 사용하여 자동으로 커밋을 실행하지 않거나, '--no-git' 플래그를 사용하여 git 저장소를 생성하지 않을 수 있습니다. $ forge init hello_foundry 생성된 프로젝트 디렉터리 구조는 다음과 같습니다. $ cd hello_foundry $ tree . -d -L 1 . ├── lib ├── script ├── src └── test 4 directories 프로젝트 빌드 forge build $ forge build [⠢] Compiling... [⠃] Compiling 22 file..
문제 17103번: 골드바흐 파티션 첫째 줄에 테스트 케이스의 개수 T (1 ≤ T ≤ 100)가 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있고, 정수 N은 짝수이고, 2 < N ≤ 1,000,000을 만족한다. www.acmicpc.net 골드바흐의 추측: 2보다 큰 짝수는 두 소수의 합으로 나타낼 수 있다. 짝수 N을 두 소수의 합으로 나타내는 표현을 골드바흐 파티션이라고 한다. 짝수 N이 주어졌을 때, 골드바흐 파티션의 개수를 구해보자. 두 소수의 순서만 다른 것은 같은 파티션이다. 입력 첫째 줄에 테스트 케이스의 개수 T (1 ≤ T ≤ 100)가 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있고, 정수 N은 짝수이고, 2 < N ≤ 1,000,000을 만족한다. 출력 각각의 테스트 케..
⚠ Vault란? HashiCorp Vault는 ID 기반 시크릿 및 암호화 관리 시스템입니다. 여기서 시크릿은 API 암호화 키, 비밀번호, 인증서 등 액세스를 엄격하게 제어하고자 하는 모든 것을 아우릅니다. Vault는 인증(authentication) 및 인가(authorization) 방법에 따라 게이트화된 암호화 서비스를 제공합니다. Vault의 UI, CLI 또는 HTTP API를 사용하여 기밀 및 기타 중요 데이터에 대한 액세스를 안전하게 저장 및 관리하고, 엄격하게 제어(restrict)하며, 감사(audit)할 수 있습니다. 🎮 초기화 $ go mod init vault-example $ touch main.go $ touch docker-compose.yml $ go get github..