# Log

Contract 모듈 기능 중 하나로 계약을 진행 중 발생한 이벤트 또는 행동, 결과 등의 정보를 트랜잭션을 통해 체인에 기록하거나, ContractHash에 기록되어 있는 Log를 조회할 수 있습니다.

## Contents

<table><thead><tr><th width="330">Name</th><th width="411">Description</th></tr></thead><tbody><tr><td><a href="#1.-addcontractlog">1. addContractLog</a></td><td>체인에 계약 작성 시 발생한 이벤트 또는 행동, <br>결과 등의 정보를 기록할 수 있습니다.</td></tr><tr><td><a href="#2.-getcontractlog">2. getContractLog</a></td><td>체인에 기록되어 있는 로그를 ID로 조회합니다.</td></tr><tr><td><a href="#3.-getcontractlogall">3. getContractLogAll</a></td><td>체인에 기록되어 있는 모든 로그를 조회합니다.</td></tr><tr><td><a href="#4.-getgasestimationaddcontractlog">4. getGasEstimationAddContractLog</a></td><td><p>addContractLog 트랜잭션 실행 시 필요 가스</p><p>비용을 예상합니다.</p></td></tr><tr><td><a href="#5.-getcontractlistfromhash">5. getContractListFromHash</a></td><td>해시에 등록되어 있는 모든 로그를 조회합니다.</td></tr><tr><td><a href="#6.-params">6. Params</a></td><td>API 호출을 위한 파라미터들의 정보입니다.</td></tr></tbody></table>

## 1. addContractLog

계약 진행 시 발생한 이벤트 또는 행동 결과 등의 정보를 트랜잭션을 통해 체인에 기록할 수 있는 함수입니다. 이 함수를 실행하였을 경우 파라미터 정보를 기반으로 체인에 트랜잭션이 생성되며, "Return value"의 "transactionHash" 값을 이용하여 피르마체인 익스플로러에서 시각적 결과를 확인할 수 있습니다.

#### **Parameters**

<table><thead><tr><th width="161.33333333333331">Name</th><th width="255">Type</th><th>Example</th></tr></thead><tbody><tr><td>wallet</td><td><mark style="color:blue;">Object</mark> (<mark style="color:green;">FirmaWalletService</mark>)</td><td><em>You can check the usage through the "</em><a href="#undefined"><em>Github example source</em></a><em>".</em></td></tr><tr><td>contractHash</td><td><mark style="color:blue;">String</mark></td><td>"da39330a6dfd90a91563603950f742240fa222580beecf36e141fe6410184e8b1669119707"</td></tr><tr><td>timeStamp</td><td><mark style="color:blue;">Number</mark></td><td>1669182016039</td></tr><tr><td>eventName</td><td><mark style="color:blue;">String</mark></td><td>"createContract"</td></tr><tr><td>ownerAddress</td><td><mark style="color:blue;">String</mark></td><td>"firma1nssuz67am2uwc2hjgvphg0fmj3k9l6cx65ux9u"</td></tr><tr><td>jsonString</td><td><mark style="color:blue;">String</mark> (<mark style="color:green;">JSON</mark>)</td><td>"{Encryption:{type:"JWT",alg:"HS256"},contracts:[{target:"contractor1",email:"contractor1@gmail.com"}]}"</td></tr><tr><td>txMisc<br>(Not required)</td><td><mark style="color:blue;">Object</mark> (<mark style="color:green;">TxMisc</mark>)</td><td>{fee:200000,gas:163821,memo:"custom message"}</td></tr></tbody></table>

#### Return value

```json5
{
  code: 0,
  height: 413126,
  rawLog: ‘[{
    "events": [{
      "type": "message",
        "attributes": [{
        "key": "action",
        "value":"CreateContractLog“
      }]
    }]
  }]',
  transactionHash: "F61584DE6B2F...63B1788247FE",
  gasUsed: 73443,
  gasWanted: 200000
}

```

## 2. getContractLog

계약 진행 시 발생한 계약 로그를 조회할 수 있는 기능입니다. logId를 이용하여 조회하며, addContractLog 트랜잭션의 정보를 확인할 수 있습니다.\
\&#xNAN;*\* transactionHash 정보는 포함되어 있지 않습니다.*

#### Paramters

<table><thead><tr><th width="160.33333333333331">Name</th><th width="260">Type</th><th>Example</th></tr></thead><tbody><tr><td>logId</td><td><mark style="color:blue;">String</mark> (<mark style="color:blue;">Number</mark>)</td><td>"6792"</td></tr></tbody></table>

#### Return value

```json5
{
  creator: "firma1nssuz67a...j3k9l6cx65ux9u",
  id: "68219",
  contractHash: "da39330a6dfd90a...4e8b1669108636",
  timeStamp: "1669108636",
  eventName: "createContract",
  ownerAddress: "firma1nssuz67a...j3k9l6cx65ux9u",
  jsonString: "{}"
}

```

## 3. getContractLogAll

체인에 기록되어 있는 모든 계약 로그를 조회합니다. 체인 내 기록되어 있는 모든 로그를 조회하기에 모든 데이터를 찾으려고 할 경우 많은 딜레이가 발생하게 됩니다. 해당 기능을 실제 서비스에서 사용하는 것은 권장하지 않으며, 로그 조회 및 특정 데이터를 찾기 위한 집계 용도로 사용을 추천합니다.

#### Parameters

<table><thead><tr><th width="161.33333333333331">Name</th><th width="256">Type</th><th>Example</th></tr></thead><tbody><tr><td>paginationKey<br>(Not required)</td><td><mark style="color:blue;">String</mark> | <mark style="color:blue;">Undefined</mark></td><td>"AAAAAAAAAGQ="</td></tr></tbody></table>

#### Return value

```json5
{
  [{
    creator: 'firma1p3qk0ednef258lv6vjt6g657d7jh0gh6wez9c4',
    id: '99',
    contractHash: 'test0.9212182198543295',
    timeStamp: '1666933357',
    eventName: 'test0.678718823219671',
    ownerAddress: 'test',
    jsonString: '{}'
  }],
  ...
  pagination: { next_key: 'AAAAAAAAAGQ=', total: 68221 }
}
```

## 4. getGasEstimationAddContractLog

addContractLog 트랜잭션 생성하는 함수 실행 시 발생하는 가스 비용을 계산합니다. addContractLog 함수의 마지막 파라미터의 용도로 사용되며, 해당 함수를 사용하여 수수료 비용을 지불하는 것을 권장합니다.

#### Parameters

<table><thead><tr><th width="158.33333333333331">Name</th><th width="248">Type</th><th>Example</th></tr></thead><tbody><tr><td>wallet</td><td><mark style="color:blue;">Object</mark> (<mark style="color:green;">FirmaWalletService</mark>)</td><td><em>You can check the usage through the "</em><a href="https://firmachain-1.gitbook.io/firmachain/module-comming-soon/contract/log#undefined"><em>Github example source</em></a><em>".</em></td></tr><tr><td>contractHash</td><td><mark style="color:blue;">String</mark></td><td>"da39330a6dfd90a91563603950f742240fa222580beecf36e141fe6410184e8b1669119707"</td></tr><tr><td>timeStamp</td><td><mark style="color:blue;">Number</mark></td><td>1669182016039</td></tr><tr><td>eventName</td><td><mark style="color:blue;">String</mark></td><td>"createContract"</td></tr><tr><td>ownerAddress</td><td><mark style="color:blue;">String</mark></td><td>"firma1nssuz67am2uwc2hjgvphg0fmj3k9l6cx65ux9u"</td></tr><tr><td>jsonString</td><td><mark style="color:blue;">String</mark> (<mark style="color:green;">JSON</mark>)</td><td>"{Encryption:{type:"JWT",alg:"HS256"},contracts:[{target:"contractor1",email:"contractor1@gmail.com"}]}"</td></tr></tbody></table>

#### Return value

```json5
112706
```

## 5. getContractListFromHash

#### Parameters

<table><thead><tr><th width="162.33333333333331">Name</th><th width="111"></th><th>Example</th></tr></thead><tbody><tr><td>contractHash</td><td><mark style="color:blue;">String</mark></td><td>"da39330a6dfd90a91563603950f742240fa222580beecf36e141fe6410184e8b1669119707"</td></tr></tbody></table>

#### Return value

```json5
[
  '68183', '68185', '68187', '68189', '68193', '68195',
  '68199', '68201', '68207', '68209', '68213', '68215'
]
```

## 6. Params

<table><thead><tr><th width="195">Name</th><th>Description</th></tr></thead><tbody><tr><td>wallet</td><td>사용자의 Mnemonic으로 생성한 고유 지갑 변수입니다.<br>FirmaSDK 모듈 중 Wallet.fromMnemonic 함수를 통해 선언할 수 있습니다.</td></tr><tr><td>contractHash</td><td>파일 또는 텍스트 정보를 고정된 길이로 매핑한 정보입니다. 체인에서 Contract 추적을 위한 정보로 활용이 가능하며, 하나의 Contract Hash에 여러 개의 Log를 추가할 수 있습니다. 고유 값 사용을 권장하며, FirmaUtil을 통해 파일 및 텍스트의 해시 값을 가져올 수 있습니다.</td></tr><tr><td>timeStamp</td><td>해당 이벤트 또는 행동, 결과에 대한 로그가 발생한 시점을 의미합니다. "Unix time stamp" 형식이며, 숫자 타입으로 작성해주세요.</td></tr><tr><td>eventName</td><td>이벤트 또는 행동, 결과에 대한 정보를 의미합니다. 계약 진행을 예로 들어 "계약 생성", "서명자 초대", "계약자1 서명", "모든 서명 완료", "계약 완료" 로 사용될 수 있습니다.</td></tr><tr><td>ownerAddress</td><td>피르마체인 지갑 주소를 입력해주세요. 지갑 주소의 대상은 누구나 될 수 있으며, "서비스 대표 지갑 주소", "서명자 지갑 주소" 등을 예시로 들 수 있습니다.</td></tr><tr><td>jsonString</td><td>계약과 관련된 추가 정보를 기록할 수 있습니다. 예를 들어 공개키(암호화), 계약서 저장 공간 또는 다운로드 링크, 계약 진행자의 이메일 주소 등이 될 수 있습니다. JSON 형식의 문자열 타입으로 작성해주세요.<br><em>* 정해진 규격은 없으며 커스텀 하여 사용하시면 됩니다.</em></td></tr><tr><td>txMisc</td><td><p>트랜잭션 호출 시 사용될 수수료 비용을 담고 있는 오브젝트입니다.</p><p><em>* 가스 계산 없이 사용할 경우 기본 가스 비용은 0.02fct입니다.</em></p></td></tr><tr><td>logId</td><td>체인 내 기록되어 있는 addContractLog의 Unique ID 값입니다. 해당 ID로 등록된 Log를 조회할 수 있습니다.</td></tr><tr><td>paginationKey</td><td>getContractLogAll 조회 시 모든 log를 가져옵니다. 100개가 초과한 경우 101번째 이후 데이터를 조회하기 위한 값으로 사용됩니다.</td></tr></tbody></table>
