묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결블록체인 이더리움 부동산 댑(Dapp) 만들기 - 기본편
[긴급] 전체 소스코드 파일 있었던거 같은데 어디서 받나요?
전체 소스코드 파일 있었던거 같은데 어디서 받나요?2번째 결제입니다 (다른아이디)빠른 답변 부탁드립니다.
-
미해결블록체인 이더리움 부동산 댑(Dapp) 만들기 - 기본편
블록체인 강의
1.제 host는 7545인데 이렇게 뜨는 이유가 먼가요 2.에러가 나는데 js코드는 다 맞다고 뜨는데 해ㅐ결좀 해주세요
-
미해결블록체인 이더리움 부동산 댑(Dapp) 만들기 - 기본편
강의내용 질문입니다 메타마스크
로컬호스트8545가 떠야하는데 테스트넷에 호스트가 뜨질 않아요 그래서 직접추가로 넣을려했는데 체인 ID를 가져올 수 없습니다. RPC URL이 올바른가요?라고 뜹니다 해결좀 해주세요 ㅠㅠㅠ
-
미해결[D.P.(DappProject)] 디앱 프로젝트(NFT 생성, NFT 구매 및 판매)
localhost 전환이 안됩니다.
터미널보면 문제 없는 것 같은데이 오류가 나면서 localhost로 접근이 안됩니다.원래 됐었는데 갑자기 안돼서 어떻게 해결해야하는지 모르겠습니다.개발자 도구보면 이런식으로 나옵니다 웹소켓 문제라고 하는데 캐시삭제해보고 remixd 삭제했다가 다시 설치해보고 브라우저를 바꿔봐도 여전히 안됩니다..
-
미해결[D.P.2(DappProject2)] 디앱 프로젝트2(Klaytn 네트워크를 활용한 NFT 생성 및 판매)
민팅한 nft의 판매 등록이 되지 않아요.
- 학습 관련10강 듣는중 opensea에 등록한 nft를 판매 등록 하려는데 이미지와 같은 에러가 나타나면서 판매등록이 되지 않습니다.opensea testnet - baobab을 사용중입니다.Seaport order validation failed: ['Conduit key invalid'], []어떻게 해결해야 할까요? ㅠ
-
미해결[D.P.2(DappProject2)] 디앱 프로젝트2(Klaytn 네트워크를 활용한 NFT 생성 및 판매)
metadata를 읽어오지 못해요 ㅠ
refersh metadata를 몇번이고 해보고 캐시 지우고 해봐도 이미지와 name, description이 업데이트 되지 않습니다. ㅠmint 해서 tokenURI실행하면 아래와 같이 나옵니다.해당 url로 접근하면 json이 잘 나오고 imgaeurl접속해도 이미지가 잘 나오는데 opensea testnet에는 아무 정보도 업데이트 되지 않아요 ㅠ 아래는 ㄴ소스 코드입니다. // SPDX-License-Identifier: MIT pragma solidity ^0.8.20; import "@openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol"; import "@openzeppelin/contracts/utils/Strings.sol"; contract MintGemToken is ERC721Enumerable{ //메타 data json폴더 경로 string public metadataURI; constructor(string memory _name, string memory _symbol, string memory _metadataURI) ERC721(_name,_symbol){ metadataURI = _metadataURI; } struct GemTokenData{ uint gemTokenRank; uint gemTokenType; } // 토큰 id => 랭크,타입 mapping(uint => GemTokenData) public gemTokenData; //* ERC721에 구현되어있는 메서드를 override //tokenURI -> metadata가 저장되어있는 json의 주소를 던져줌. function tokenURI(uint _tokenId)override public view returns(string memory){ string memory gemTokenRank = Strings.toString(gemTokenData[_tokenId].gemTokenRank); string memory gemTokenType = Strings.toString(gemTokenData[_tokenId].gemTokenType); //argument들을 하나로 합쳐줘서 문자열 리턴 -> metadata json uri return string(abi.encodePacked(metadataURI,'/',gemTokenRank,'/',gemTokenType,".json")); } function mintGemToken() public { uint tokenId = totalSupply()+1; // 발행자에게 tokenId의 토큰 발행 -> 일단 현재는 하드코딩 gemTokenData[tokenId] = GemTokenData(1,1); _mint(msg.sender,tokenId); } }
-
해결됨모두를 위한 모두의 EVM 블록체인 BApp 개발 - 입문
npx hardhat test ./test/Greeter.test 실행시 에러가 납니다.
npx hardhat test ./test/Greeter.test 실행시 에러가 납니다.import { expect } from 'chai'; import { ethers, waffle } from 'hardhat'; import GreeterArtifact from '../artifacts/contracts/Greeter.sol/Greeter.json'; import { Greeter } from '../typechain'; // import { BigNumber } from 'ethers'; // import '@nomiclabs/hardhat-waffle'; //* Greeter.sol과 비교하면서 보자!! describe('Greeter', () => { let greeter: Greeter; const initMsg = 'hello blockchain!!!'; //* hardHat에서 만들어진 10개 계정부터 앞에 5개 가져옴. const [admin, other0, other1, other2, receiver] = waffle.provider.getWallets(); before(async () => {}); beforeEach(async () => { //admin계정이 Greeter 배포 greeter = (await waffle.deployContract(admin, GreeterArtifact, [ initMsg, ])) as Greeter; //* Greeter로 형변환 해서 넣어주라는 뜻 }); it('constructor', async () => { const greetMsg = await greeter.getGreet(); expect(greetMsg).to.be.equal(initMsg); }); it('setGreeting', async () => { const secondMsg = 'second greeting msg'; await greeter.setGreeting(secondMsg); //* 이렇게 unit 테스트인 경우에만 hardhat이 transaction.wait()을 사용하지 않아도 결과를 기다림. const recvMsg = await greeter.getGreet(); expect(recvMsg).to.be.equal(secondMsg); }); it('setGreeting with event', async () => { const secondMsg = 'second greeting msg'; /* * setGreeting -> non-view함수 -> 채굴할 때까지 기다려야함. * transaction.wait()을 호출하여 채굴이 끝날 때까지 기다린다. */ const transaction = await greeter.setGreeting(secondMsg); //* transaction을통해 채굴이 끝난 후 영수증을 가져옴. const receipt = await transaction.wait(); //영수증 안의 이벤트에서 SetGreeting이라는 event만 가져온다. const event = receipt.events?.filter(x => { return x.event == 'SetGreeting'; })[0]; //* contract배포자가 admin이라서 자동으로 admin으로 설정됨. //* ? : undefined가 될수도 있다. ~> 실제로는 예외처리 필요 expect(event?.args?.sender).to.be.equal(admin.address); expect(event?.args?.oldGreeting).to.be.equal(initMsg); expect(event?.args?.newGreeting).to.be.equal(secondMsg); const thirdMsg = 'third greeting msg'; await expect(greeter.setGreeting(thirdMsg)) .to.emit(greeter, 'SetGreeting') .withArgs(admin.address, secondMsg, thirdMsg); }); it('getGreetingHistory', async () => { const secondMsg = 'second greeting msg'; const transaction = await greeter.setGreeting(secondMsg); const receipt = await transaction.wait(); const thirdMsg = 'third greeting msg'; await expect(greeter.setGreeting(thirdMsg)) .to.emit(greeter, 'SetGreeting') .withArgs(admin.address, secondMsg, thirdMsg); const count = await greeter.getGreetingHistoryCount(); expect(count).to.be.equal(3); const historyAll = await greeter.getGreetingHistoryAll(); expect(historyAll.length).to.be.equal(3); expect(historyAll[0]).to.be.equal(''); expect(historyAll[1]).to.be.equal(initMsg); expect(historyAll[2]).to.be.equal(secondMsg); const secondHistory = await greeter.getGreetingHistoryOne(1); expect(secondHistory).to.be.equal(initMsg); //* 없는 인덱스 예상 했을 때 revert메시지 나오는지 await expect(greeter.getGreetingHistoryOne(3)).to.reverted; }); it('setGreetingPayable', async () => { const secondMsg = 'second greeting msg'; await expect(greeter.setGreetingPayable(secondMsg)).to.reverted; //* revert문 예상 await expect(greeter.setGreetingPayable(secondMsg)).to.revertedWith( 'msg.value is not 0.1 ether', ); await expect( greeter.setGreetingPayable(secondMsg, { value: ethers.utils.parseUnits('0.09', 'ether'), }), ).to.revertedWith('msg.value is not 0.1 ether'); await expect( greeter.setGreetingPayable(secondMsg, { value: ethers.utils.parseUnits('0.11', 'ether'), }), ).to.revertedWith('msg.value is not 0.1 ether'); await greeter.setGreetingPayable(secondMsg, { //* value를 wei로 바꿔줌.(ehter단위) value: ethers.utils.parseUnits('0.1', 'ether'), //~> 이렇게도 가능 // value: BigNumber.from(10).pow(17), }); const recvMsg = await greeter.getGreet(); expect(recvMsg).to.be.equal(secondMsg); }); it('withdraw', async () => { const secondMsg = 'second greeting msg'; //* setGreetingPayable을 실행하기 전에 Ether가 얼마나 들었는지 확인하기 위함. const oldContractEther = await waffle.provider.getBalance(greeter.address); expect(oldContractEther).to.be.equal(ethers.utils.parseUnits('0', 'ether')); //*admin 호출 // await greeter.connect(admin).setGreetingPayable(secondMsg, { // await greeter.setGreetingPayable(){} //*admin이 아닌 다른 계정이 호출 await greeter.connect(other0).setGreetingPayable(secondMsg, { value: ethers.utils.parseUnits('0.1', 'ether'), }); await greeter.connect(other0).setGreetingPayable(secondMsg, { value: ethers.utils.parseUnits('0.1', 'ether'), }); await greeter.connect(other1).setGreetingPayable(secondMsg, { value: ethers.utils.parseUnits('0.1', 'ether'), }); await greeter.connect(other2).setGreetingPayable(secondMsg, { value: ethers.utils.parseUnits('0.1', 'ether'), }); //위에서 0.1씩 4번 호출 -> 0.4 ether const newContractEther = await waffle.provider.getBalance(greeter.address); expect(newContractEther).to.be.equal( ethers.utils.parseUnits('0.4', 'ether'), ); const other0Balance = await greeter.balances(other0.address); const other1Balance = await greeter.balances(other1.address); const other2Balance = await greeter.balances(other2.address); expect(other0Balance).to.be.equal(ethers.utils.parseUnits('0.2', 'ether')); expect(other1Balance).to.be.equal(ethers.utils.parseUnits('0.1', 'ether')); expect(other2Balance).to.be.equal(ethers.utils.parseUnits('0.1', 'ether')); //* 얼마나 ether를 들고 있었는지 확인 const oldReceiverEther = await waffle.provider.getBalance(receiver.address); console.log('oldReceiverEther', oldReceiverEther); await expect( greeter.connect(other0).withdraw(receiver.address), ).to.revertedWith('only owner'); //*connect 생략 -> admin await greeter.withdraw(receiver.address); const newReceiverEther = await waffle.provider.getBalance(receiver.address); expect(newReceiverEther.sub(oldReceiverEther)).to.be.equal( ethers.utils.parseUnits('0.4', 'ether'), ); const lastContractEther = await waffle.provider.getBalance(greeter.address); expect(lastContractEther).to.be.equal( ethers.utils.parseUnits('0', 'ether'), ); }); }); import { HardhatUserConfig } from 'hardhat/types'; import 'hardhat-typechain'; import '@nomiclabs/hardhat-waffle'; // import 'dotenv/config'; const config: HardhatUserConfig = { solidity: { compilers: [ { version: '0.8.17', settings: { optimizer: { enabled: true, runs: 200, }, }, }, ], }, defaultNetwork: 'hardhat', networks: { hardhat: { accounts: { count: 10, }, }, }, mocha: { timeout: 400000, }, }; export default config; 아래와 같은 문구가 나타납니다.Creating Typechain artifacts in directory typechain for target ethers-v5Successfully generated Typechain artifacts! Greeter 1) "before each" hook for "constructor" 0 passing (99ms) 1 failing 1) Greeter "before each" hook for "constructor": Error: Cannot find module 'ethereum-waffle/dist/cjs/src/deployContract'Require stack:- /Users/nareun130/study/nft/basic/node_modules/@nomiclabs/hardhat-waffle/dist/src/deploy.js- /Users/nareun130/study/nft/basic/node_modules/@nomiclabs/hardhat-waffle/dist/src/index.js- /Users/nareun130/study/nft/basic/hardhat.config.ts- /Users/nareun130/study/nft/basic/node_modules/hardhat/internal/core/config/config-loading.js- /Users/nareun130/study/nft/basic/node_modules/hardhat/internal/cli/cli.js- /Users/nareun130/study/nft/basic/node_modules/hardhat/internal/cli/bootstrap.js at Function.Module._resolveFilename (node:internal/modules/cjs/loader:1140:15) at Function.Module._resolveFilename.sharedData.moduleResolveFilenameHook.installedValue [as resolveFilename] (nodemodules/@cspotcode/source-map-support/source-map-support.js:811:30) at Function.Module._load (node:internal/modules/cjs/loader:981:27) at Module.require (node:internal/modules/cjs/loader:1231:19) at require (node:internal/modules/helpers:177:18) at hardhatDeployContract (node_modules/@nomiclabs/hardhat-waffle/src/deploy.ts:26:7) at Context.<anonymous> (test/Greeter.test.ts:21:29)deploy.ts의 26라인을 가봤는데 이렇게 나오는데 node_modules의 경로를 찾아가보니 ethereum-waffle/cjs폴더 안에 src폴더가 없이 바로 아래 deployContract가 있어서 그런건지 해결방법을 잘 모르겠습니다. 도와주세요 ㅠ
-
미해결블록체인 채굴 모듈 만들어보기
그래서 바뀐거 언제적용해요 ㅋㅋ?
ㄹㅇ 무슨생각을갖고 강의를 찍은건지중간에 전혀다른 코드작업하는걸로 강의가 바껴버려서중간중간 넘어가는순간 정지해서 코드 다 수정하고 있는데아직 새로추가된 literal.go는 안보여주네 강의 쭉 보다보면 여기페이지 보여줄라나 ㅋㅋ 그떄 수정 해야것네
-
미해결리액트네이티브 블록체인 dapp 개발 시리즈4(기초입문)
React Native 설치 전 단계가 무엇일까요?
안녕하세요, React Native CLI로 앱을 만들려고하는데, 자바 설정이나 Gradle 설정이 안되어 있어 에러가 납니다.혹시 React Native CLI 설치를 위해 해야 할 필수 과정이 있을까요?JAVA_HOME 환경 변수 설정이나 JAVA 설치를 해야하나요??EXPO CLI는 열리는데 React Native CLI는 열리지 않더라고요ㅜㅜ앱 제작을 위해 React Native CLI가 필수라 도움 부탁드립니다!
-
미해결리액트네이티브 블록체인 dapp 개발 시리즈4(기초입문)
시뮬레이터 기종이나 설정은 어떻게 진행해야할까요?
'리액트 네이티브 설치3 expo' 강의에서는 메인 화면에서 바로 시뮬레이터를 선택가능하게 보여지시는데 저는 메인 화면에서 그걸 발견할 수 없더라고요. 따로 검색해서 tool로 들어가서 시뮬레이터를 설치했는데 어떤 디바이스를 선택해야하는지 문의드립니다. 혹시 디바이스 사이즈도 많은 영향을 주는걸까요??그리고 수업 중간중간에 텀과 화면 멈춤이 있어서 어느 부분을 진행하고 있는지 알 수 없습니다..책이야기를 하시는 데 어디서 어떤 걸 봐야하는지 알 수 없어서요ㅜㅜ
-
미해결리액트네이티브 블록체인 dapp 개발 시리즈4(기초입문)
Intel x86 Emulator Accelerator (HAXM installer) 설치가 불가능합니다.
'리액트 네이티브 설치 안드로이드' 강의 중 1:57에 보여지는 화면을 따라 설치하려고 하는데, 설치 에러가 떠서 문의드립니다.Intel x86 Emulator Accelerator (HAXM installer)를 설치하려고 하면 아래와 같은 메세지가 나옵니다.메세지에 적힌 곳으로 가면 어떤 걸 다운받아야 할 지 모르겠더라구요,,혹시 이 tool이 없더라도 괜찮을지 문의드립니다!! Running Intel® HAXM installerIntel HAXM installation failed!For more details, please check the installation log: C:\Users\SSAFY\AppData\Local\Temp\haxm_install-20240423_1325.logIntel® HAXM installation failed. To install Intel® HAXM follow the instructions found at: https://github.com/intel/haxm/wiki/Installation-Instructions-on-WindowsDone
-
해결됨스마트 컨트랙트 이벤트 모듈 배우고 학습하기
메타마스크에 polygon mumbai 연결이 불가하네요. faucet도 받을 수가 없습니다.
mumbai 연결을 위해 아래와 같은 사이트를 찾았습니다.https://docs.polygon.technology/tools/wallets/metamask/add-polygon-network/#mumbai 그런데, 연결을 해보려고 하면, 아래 스크린샷처럼 연결이 안됩니다.그리고 faucet도 받으려고 하니, 메인넷에 0.001 MATIC이 있어야 하네요... 강의에서는 그냥 받으셨던데;뭄바이 외에 다른 네트워크를 연결하거나 현재 폴리곤 테스트넷 연결이 가능한 방법이 있는지 문의 드립니다. 컨트랙트 배포를 하지 못해 다음 진행을 못하고 있습니다. 도와주세요ㅠ (추가) infura도 접속이 되지 않는거 같습니다. (뒤에는 지웠는데, 제 계정에서 가지고 온 api 값 입니다)Get BlockNumber err Post "https://polygon-mumbai.infura.io/v3/54f68f4772f544bxxxx": dial tcp: lookup polygon-mumbai.infura.io: no such host
-
미해결세상을 바꿀 Web3 개발자 시리즈 1 (블록체인, 리믹스, 리액트, web3.js)
int, uint 값 리액트
안녕하세요.리액트 게임 컨트랙트 연결 강의에서int, uint에 대한 값만 공백으로 뜹니다. Abi도 잘 가져왔는데 아무 에러도 뜨지 않고 콘솔창에도 아무것도 뜨지 않습니다..ㅠㅠ
-
미해결초보자도 쉽게 따라하는 블록체인 프로그래밍(코인제작포함)
deposit 함수 관련 질문
deposit 함수 바디에 아무런 내용을 구현하지 않아도 작동이 되는 이유가 무엇인가요??
-
미해결블록체인 채굴 모듈 만들어보기
아 갑자기 코드가 바껴서 한참 헤맸습니다
wallet repository에서 repository struct 관련 에러가 생기길래 찾아봤더니app.go NewService 호출하는 부분에 매개변수나 이런게 바뀌어서 문제였네요한참 헤맸습니다,, 갑자기 강의가 확 뛰어버리네요 코드가 바뀌어요
-
미해결초보자도 쉽게 따라하는 블록체인 프로그래밍(코인제작포함)
unit count 초기화 관련 질문있습니다.
안녕하세요!컨트랙트 개발 쪽에 관심이 생겨서 어제부터 수업 수강하고 있는데 너무 잘 듣고 있습니다:) 좋은 수업 감사합니다.'카운터 컨트랙트를 통해서 블록체인 기록여부 확인하기' 강의의 코드에 대해 궁금한 점이 있어 글 남깁니다. unit count; 이렇게 작성하면 저절로 count 변수에 0이 할당되는 걸까요? 따로 0 초기화를 안 해줘도 상관없는 건지 궁금합니다!getCount 함수에서 view 키워드를 반드시 적어줘야 하는 건가요? 감사합니다.
-
해결됨모두를 위한 모두의 EVM 블록체인 BApp 개발 - 입문
무슨 에러인지 모르겠습니다
TypeError: Function needs to specify overridden contract "ERC721URIStorage". --> contracts/Monkey.sol:93:27: |93 | ) public view virtual override(ERC721, ERC721Enumerable) returns (bool) { | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^Note: This contract: --> @openzeppelin/contracts/token/ERC721/extensions/ERC721URIStorage.sol:12:1: |12 | abstract contract ERC721URIStorage is IERC4906, ERC721 { | ^ (Relevant source part starts here and spans across multiple lines).TypeError: Invalid contract specified in override list: "ERC721". --> contracts/Monkey.sol:93:27: |93 | ) public view virtual override(ERC721, ERC721Enumerable) returns (bool) { | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^Note: This contract: --> @openzeppelin/contracts/token/ERC721/ERC721.sol:19:1: |19 | contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { | ^ (Relevant source part starts here and spans across multiple lines).Error HH600: Compilation failedFor more info go to https://hardhat.org/HH600 or run Hardhat with --show-stack-traces 에러메세지인데 어떤 에러인지 잘모르겠습니다앞에서도 에러가 많이 났는데 다 해결하면서 진행했는데여기서 막혀버리네요typechain 만드는 과정에서 에러가 납니다
-
미해결[D.P.(DappProject)] 디앱 프로젝트(NFT 생성, NFT 구매 및 판매)
리팩토링 1 강의 getAnimalTokens() 함수 사용 권한 문의
리팩토링 1 강의 13:25초에 setSaleNft(contract_address) 를 실행시켜야 getAnimalTokens() 함수를 사용한다고 하셨는데 왜 실행시켜야 하는지 모르겠습니다..!import 해오고SaleAnimalToken public saleAnimalToken;시점에 사용 할 수있는게 아닌건가요?saleAnimalToken.sol deploy 할 때도 이미 contract_address 가 등록된 줄 알았는데 setSaleNft(contract_address); 를 한번 실행시켜야 한다는게 잘 이해가 되지 않습니다ㅠ
-
해결됨블록체인 채굴 모듈 만들어보기
강의영상 중복
섹션 5의 제일 마지막 2개 강의가 같은 영상입니다. (25,26강) 수정 부탁드려요!
-
해결됨모두를 위한 모두의 EVM 블록체인 BApp 개발 - 입문
opensea 민팅
전에 했을때는 민팅되서 오픈시에서 nft를 확인할 수 있었는데 지금은민팅했을때 nft를 클릭해보면 이미지도 들어오지않고 description의 내용도 추가되지않고있습니다.어떤게 문제일까요 ?