Caver-js-examples ipfs 관련 질문

caver-js-examples/ipfs/using_ipfs_with_caver at master · klaytn/caver-js-examples · GitHub 를 보면서 caver-js와 ipfs를 살펴보고 있는데, index.js코드를 보던 중 궁금한 점이 있어서 질문드립니다.

설정되어 있는 변수들 중 senderAddress(와 senderPrivateKey)가 있는데 ipfs에 파일을 올리는데 sender의 개념이 잘 이해가 안가서요, ipfs네트워크에 파일을 올리는 주체가 되는 EOA를 말하는 걸까요?

또 recipientAddress가 있는데 수용자의 주소?정도로 해석이 되는데 sender가 ipfs에 파일을 올리는 주체라면 recipient는 무엇일지…파일을 다운로드 받는 EOA주소가 되는걸까요?

그리고

    // Set connection with IPFS Node
    caver.ipfs.setIPFSNode('ipfs.infura.io', 5001, true)

이렇게 ipfs노드를 세팅할때 infura를 사용하는걸로 나와있는데 infura에서 프로젝트를 만들었을 때 제공되는 엔드포인트 중에서 baobab이나 cypress가 없는데 코드 내용대로라면 infura와 klaytn도 caver를 통해 저런식으로 연동될 수 있는 걸까요?

답변 항상 감사드립니다.

@moomin

안녕하세요.
sender와 recipient는 아래와 같이 ValueTransferMemo 트랜잭션을 전송할 때 사용되는 것을 확인해보실 수 있습니다.

    // Add keyring to in-memory wallet
    const senderKeyring = caver.wallet.keyring.create(senderAddress, senderPrivateKey)
    caver.wallet.add(senderKeyring)

    // Create ValueTransferMemo transaction
    const tx = caver.transaction.valueTransferMemo.create({
        from: senderKeyring.address,
        to: recipientAddress,
        value: 1,
        input: multihash,
        gas: 30000,
    })

소스코드에서 확인해보실 수 있듯, sender와 recipient는 IPFS 네트워크에 파일을 올리는 액션과 "아무런 관계"도 없습니다.
IPFS 네트워크에 업로드 된 파일에 대한 해시를 블록체인에 기록할 때 사용하는 것 뿐입니다.

링크로 주신 예제는 IPFS에 파일을 업로드하고 업로드된 파일의 해시(고유 식별자)를 블록체인에 기록해두는 예제입니다. 블록체인에는 크기가 큰 파일을 저장하기 어렵기 때문에 "원본 파일은 IPFS에 저장하고 그 파일에 대한 고유 해시값을 블록체인에 기록하는 형태"의 방법론을 취하곤 합니다.

IPFS 는 블록체인과 관계 없는 별개의 프로토콜이므로 Baobab과 Cypress 에 연동한다거나 하는 개념도 존재하지 않습니다.
IPFS에 업로드된 파일의 해시(고유 식별자)를 이더리움 블록체인에 저장할 수도 있고 클레이튼에도 저장할 수 있습니다.

1개의 좋아요

답변 감사합니다. sender와 recipient가 IPFS에 파일을 업로드하고 업로드된 파일의 해시(고유 식별자)를 블록체인에 기록해두는 부분에 사용되는 것이라면 sender와 recipient는 EOA가 되어야 할까요 CA가 되어야 할까요?

// Set connection with IPFS Node
    caver.ipfs.setIPFSNode('ipfs.infura.io', 5001, true)

이렇게 IPFS에 저장된 파일 내용을 어떻게 확인할 수 있는지 찾아보다가 cid값을 https://gateway.ipfs.io/ipfs/뒤에 붙여서 확인할수 있다는 내용을 보고 https://gateway.ipfs.io/ipfs/QmZTi89D124WhTxoLc5n6AQnsJWEsA1jiX8GTtxrB1EcKB 이런식으로 'Text which will be stored on IPFS’라는 문자열 내용을 확인했습니다.

궁금한 점은 예제 코드에서 setIPFSNode()에 ‘ipfs.infura.io’, 5001, true를 인자로 넣어주었는데 각각이 의미하는 바가 무엇일까요?

'ipfs.infura.io’는 https://infura.io/의 자원을 사용하는 것인지, https://infura.io/에서 로그인하여 프로젝트를 생성한것이 아닌데 어떻게 infura를 사용 가능한 것인지 등도 궁금합니다.

@moomin

수신 주소가 EOA 될지, CA가 될지는 전적으로 구현하시는 바에 따라 달려 있습니다. 스마트 컨트랙트에 기록하시겠다면 CA 가 될 것이고, 트랜잭션의 Memo 필드에 기록하겠다라고 하시면 예제처럼 ValueTransferMemo를 사용해서 EoA로 전송하시면 됩니다.

구현에 따라 달라지는 부분이므로 정해진 답은 없습니다.

해당 함수의 인자의 각 의미는 caver-js/index.js at a2a5199fb0f8325cd4f86f11b1d7c51f89917085 · klaytn/caver-js · GitHub 를 확인해주시기 바랍니다.
질문을 올려주시는 건 좋지만, 충분히 찾아볼 수 있는 자료를 안 찾아본 건 아닐지 한 번 생각해주시면 좋을 거 같습니다.

Infura에서 퍼블릭하게 오픈해 둔 노드입니다.
운영주체가 저희가 아니므로 왜 퍼블릭하게 열어두었는지, 어떤 식으로 운영을 하는지는 저희 측에서 알기 어렵습니다 :slight_smile:
퍼블릭하게 사용하라고 오픈해주었으니 사용하고 있을 뿐이에요.

1개의 좋아요

caver-js 를 참고하고 있었는데, 해당 부분에는 인자에 대한 설명이 없어서 여쭤보게 되었습니다. caver-js 레퍼지토리 쪽에 파라미터에 대한 내용이 있었군요, 알려주셔서 감사합니다.

ValueTransferMemo를 사용하려면 EOA로 전송하는 것이군요, 감사합니다.

caver-js-examples에 사용된 노드가 Infura에서 퍼블릭하게 오픈해 둔 노드라면, Klaytn에서 제공하는 ipfs노드가 있을까요?

에셋 및 메타데이터 업로드 - KAS Docs 해당 부분에 나오는 metadat-api를 통해 사용할 수 있는것으로 보여지는데, 이 API가 내부적으로 Klaytn의 ipfs노드를 사용하는 것일까요?(그렇다면 klaytn에서 제공하는 ipfs노드에 직접 접근할수 있는 방법은 없을지도 여쭤봅니다)

에셋 및 메타데이터 업로드 - KAS Docs 문서에 Klaytn의 KIP-17 토큰 (NFT, Non-Fungible Token)와 KIP-37 토큰 (MT, Multi Token) 발행 시 에셋(asset)과 메타데이터(metadata)를 업로드, 관리해준다고 나와 있는데 그렇다면 ERC721이나 ERC1155토큰은 사용할 수 없는 거겠지요?

자료를 찾아보고 질문한다고 하는데도 부족한 점이 있어서 죄송합니다. 항상 애써주시는 klaytn네트워크의 구성원 분들께 감사드립니다.

@moomin

Klaytn 에서 제공하고 있는 공식 IPFS 노드는 별도로 없습니다.
그리고 IPFS 노드는 블록체인과는 전혀 다른 별개의 프로토콜로 Klaytn에서 제공하고 있는 IPFS 노드가 있다 하더라도 굳이 그 노드를 사용할 이유도 없습니다.

KAS 관련 질문은 KAS 관련 채널에 문의 부탁드립니다.

1개의 좋아요