Smart Contracts
스마트 계약
스마트 계약(이하 계약)은 애플리케이션의 기본 요소 중 하나입니다. 사용자가 페이지에서 계약을 구현하는 것은 일반적으로 데이터베이스 항목을 업데이트하거나 만드는 것이 목적인 단일 작업입니다. 애플리케이션의 모든 데이터 작업은 계약 시스템을 형성하며 이러한 계약은 데이터베이스 또는 계약 콘텐츠 기능을 통해 서로 상호 작용합니다.
계약 구조 (Contract Structure)
아래와 같은 형식으로 contract
키워드를 사용하여 계약을 선언합니다. 계약 이름 뒤에 중괄호로 계약 내용을 감싸야 합니다. 계약은 주로 세 가지 섹션으로 구성됩니다:
data - data section에서는 입력 데이터의 변수 이름과 변수 유형을 선언합니다.
conditions - conditions section에서는 데이터의 정확성을 검증합니다.
action - action section에서는 데이터 조작을 정의합니다.
데이터 섹션 (Data section)
data
섹션에서는 계약 데이터 입력 및 수신된 폼 매개변수를 설명합니다.
각 줄의 구조는 다음과 같습니다:
- Variable name - 변수만 수신하고 배열은 수신하지 않습니다.
- Variable data type - 변수의 data type;
- optional - 폼 요소에 기입하지 않아도 되는 선택적 매개변수입니다.
조건 섹션 (Conditions section)
conditions
섹션은 수신된 데이터의 검증을 설명합니다.
다음 명령은 오류 경고에 사용됩니다: 심각한 오류 error
, 경고 오류 warning
, 암시적 오류 info
. 이 세 가지 명령은 계약 실행을 종료하는 오류를 생성하고 각 오류는 다른 유형의 오류 로그 정보를 인쇄합니다. 예를 들어:
액션 섹션 (Action section)
action
섹션은 다른 데이터를 검색하고 결과 값을 테이블에 기록하는 계약의 주요 코드를 설명합니다. 예를 들어:
변수 (Variables)
데이터 섹션에 선언된 변수는 $
기호와 변수 이름을 통해 다른 계약 섹션으로 전달됩니다. $
기호는 데이터 섹션에 없는 다른 변수를 선언하는 데에도 사용할 수 있으며, 이 변수는 이 계약 및 이 계약이 중첩된 모든 계약의 전역 변수로 간주됩니다.
미리 정의된 변수는 스마트 계약을 호출한 트랜잭션 데이터를 포함하는 계약에서 사용할 수 있습니다.
$time
- 트랜잭션 타임스탬프; $ecosystem_id
- 생태계 ID; $block
- 트랜잭션을 포함하는 블록의 ID; $key_id
- 현재 트랜잭션에 서명한 계정의 주소; $type
- 가상 머신에서의 계약 ID; $block_key_id
- 블록을 생성한 노드의 계정 주소; $block_time
- 블록 생성 타임스탬프; $original_contract
- 초기에 트랜잭션을 처리한 계약의 이름. 이 변수가 빈 문자열이면 트랜잭션 유효성 검증 중에 계약이 호출되었음을 의미합니다. 계약이 다른 계약에 의해 호출되었는지 아니면 직접 트랜잭션에 의해 호출되었는지 확인하려면 $original_contract와 $this_contract의 값을 비교해야 합니다. 두 값이 동일하면 계약이 트랜잭션에 의해 호출된 것을 의미합니다; $this_contract
- 현재 실행 중인 계약의 이름; $guest_key
- 게스트 계정 주소; $stack
- 데이터 유형이 배열인 계약 배열 스택으로, 실행된 모든 계약을 포함합니다. 배열의 첫 번째 요소는 현재 실행 중인 계약의 이름을 나타내고, 마지막 요소는 초기에 트랜잭션을 처리한 계약의 이름을 나타냅니다; $node_position
- 블록이 위치한 검증 노드 배열의 인덱스 번호; $txhash
- 트랜잭션 해시; $contract
- 현재 계약 구조 배열.
미리 정의된 변수는 계약뿐만 아니라 애플리케이션 요소의 액세스 권한 조건을 정의하는 권한 필드에서도 액세스할 수 있습니다. 권한 필드에서 사용될 때 블록 정보에 대한 미리 정의된 변수는 $time
, $block
등과 같이 항상 0입니다.
미리 정의된 변수 $result
는 계약의 반환 결과와 함께 할당됩니다.
중첩된 계약 (Nested Contracts)
계약의 조건 및 작업 섹션에 계약을 중첩할 수 있습니다. 중첩된 계약은 직접 호출할 수 있으며 계약 매개변수는 계약 이름 뒤에 괄호 안에 지정됩니다(예: @1NameContract(Params)
). CallContract 함수를 사용하여 중첩 계약을 호출할 수도 있습니다.
파일 업로드 (File upload)
multipart/form-data
형식의 양식을 사용하여 파일을 업로드하려면 계약서의 데이터 유형이 file
이어야 합니다.
UploadBinary 계약은 파일을 업로드하고 저장하는 데 사용됩니다. 페이지 편집기의 Logicor 언어 기능 Binary를 사용하면 파일 다운로드 링크를 얻을 수 있습니다.
계약 언어에서 JSON을 필드 유형으로 지정할 수 있습니다. columnname->fieldname 구문을 사용하여 항목 필드를 처리할 수 있습니다. 얻은 값은 columnname.fieldname에 기록됩니다. 위 구문은 DBFind 함수의 Columns,One,Where에서 사용할 수 있습니다.
날짜 및 시간 연산이 포함된 쿼리 (Queries with date and time operations)
계약 언어 함수로 날짜와 시간을 직접 쿼리하고 업데이트할 수는 없지만, 아래 예시와 같이 Where 문에서 PostgreSQL 함수와 기능을 사용할 수 있습니다. 예를 들어 date_column 필드를 현재 시간과 비교해야 합니다. date_column이 타임스탬프 유형인 경우 표현식은 date_column <NOW()
여야 합니다. date_column이 Unix 유형인 경우 표현식은 to_timestamp(date_column)> NOW()
여야 합니다.
다음 Needle 함수는 SQL 형식의 날짜 및 시간을 처리하는 데 사용됩니다.
Needle 계약 언어 (Needle contract language)
계약 언어에는 데이터 알고리즘 처리 및 데이터베이스 작업을 실현할 수 있는 일련의 함수, 연산자 및 구조가 포함됩니다.
계약 편집 권한이 false
로 설정되어 있지 않으면 계약 내용을 수정할 수 있습니다. 계약 변경의 전체 이력은 Weaver에서 사용할 수 있는 블록체인에 저장됩니다.
블록체인의 데이터 작업은 최신 버전의 계약에 따라 실행됩니다.
기본 요소 및 구조 (Basic elements and structure)
데이터 유형 및 변수 (Data types and variables)
데이터 유형은 모든 변수에 정의되어야 합니다. 일반적으로 데이터 유형은 자동으로 변환됩니다. 다음과 같은 데이터 유형을 사용할 수 있습니다:
bool
- 불리언, true
또는 false
; bytes
- 바이트 형식; Int
- 64비트 정수; Array
- 어떤 유형의 배열; map
- 객체 배열; money
- 큰 정수; float
- 64비트 부동 소수점 숫자; string
- 문자열은 큰 따옴표나 이스케이프 형식으로 정의되어야 합니다: "This is a string" 또는 `This is a string`; file
- 객체 배열:
Name
- 파일 이름, string
유형; MimeType
- 파일의 MIME 타입, string
유형; Body
- 파일 내용, bytes
유형.
변수, 함수 및 계약의 이름을 포함한 모든 식별자는 대소문자를 구분합니다 (MyFunc와 myFunc은 다른 이름입니다).
변수를 선언하려면 var 키워드를 사용하고 변수의 이름과 유형을 지정해야 합니다. 중괄호 내에서 선언된 변수는 동일한 중괄호 쌍 내에서 사용되어야 합니다.
선언된 모든 변수의 기본값은 0입니다. bool 유형의 기본값은 false이고, 모든 숫자 유형의 기본값은 0이며, 문자열의 기본값은 빈 문자열입니다. 변수 선언의 예시:
배열 (Array)
계약 언어는 두 가지 유형의 배열을 지원합니다:
Array
- 인덱스가 0부터 시작하는 배열; map
- 객체의 배열.
배열 요소를 할당하고 검색할 때는 인덱스를 대괄호에 위치시켜야 합니다. 배열에서 여러 개의 인덱스를 지원하지 않으며, 배열 요소를 myarr[i][j]와 같이 처리할 수 없습니다.
[]
에 요소를 지정하여 배열 유형의 배열을 정의할 수도 있습니다. 지도 유형 arrays
의 경우 {}
를 사용하세요.
식에서 이러한 초기화를 사용할 수 있습니다. 예를 들어 함수 매개변수에 사용합니다.
개체 배열의 경우 키를 지정해야 합니다. 키는 큰따옴표(""
)로 묶인 문자열로 지정됩니다. 키 이름이 문자, 숫자 및 밑줄로 제한되는 경우 큰따옴표를 생략할 수 있습니다.
배열은 문자열, 숫자, 모든 유형의 변수 이름 및 $
기호가 있는 변수 이름을 포함할 수 있습니다. 중첩 배열을 지원합니다. 다른 맵 또는 배열을 값으로 지정할 수 있습니다.
식은 배열 요소로 사용할 수 없습니다. 변수를 사용하여 식 결과를 저장하고 이 변수를 배열 요소로 지정합니다.
If 및 While 문 (If and While statements)
계약 언어는 계약 및 함수에서 사용할 수 있는 표준 if 조건문 및 while 루프를 지원합니다. 이러한 명령문은 서로 중첩될 수 있습니다.
if 및 while 뒤에는 조건문이 와야 합니다. 조건문이 숫자를 반환하면 값이 0일 때 거짓으로 간주됩니다.
val == 0은 !val과 같고 val != 0은 val과 같습니다. if 문은 else 코드 블록을 가질 수 있으며 else는 if 조건문이 거짓일 때 실행됩니다.
다음 비교 연산자는 조건문에서 사용할 수 있습니다: <, >, >=, <=, ==, !=, ||, &&
코드 블록은 while 루프의 조건문이 참일 때 실행됩니다. break는 코드 블록의 루프를 종료하는 것을 의미합니다. 루프를 처음부터 시작하려면 continue을 사용하세요.
조건문 외에도 Needle은 +
, -
, *
, /
와 같은 표준 산술 연산도 지원합니다.
문자열 및 바이트 유형의 변수를 조건문으로 사용할 수 있습니다. 유형의 길이가 0보다 크면 조건이 참이고 그렇지 않으면 거짓입니다.
함수 (Functions)
함수는 계약의 data section 에서 수신한 데이터에 대해 일부 작업을 수행할 수 있습니다. 데이터베이스에서 데이터 읽기 및 쓰기, 값 유형 변환, 계약 간의 상호 작용 설정.
함수 선언 (Function declaration)
func 키워드를 사용하여 함수를 선언하고 그 뒤에 이름과 전달된 매개변수 목록 및 해당 유형을 사용합니다. 모든 매개변수는 괄호로 묶고 쉼표로 구분합니다. 괄호 뒤에는 함수가 반환하는 값의 데이터 유형을 선언해야 합니다. 함수 본문은 중괄호로 묶어야 합니다. 함수에 매개변수가 없으면 중괄호를 생략할 수 있습니다. 함수에서 값을 반환하려면 return
키워드를 사용하십시오.
모든 오류 검사가 자동으로 수행되기 때문에 함수는 오류를 반환하지 않습니다. 기능에 오류가 있는 경우 계약은 해당 작업을 종료하고 오류 설명을 창에 표시합니다.
가변 길이 매개변수 (Variable-length parameters)
함수는 가변 길이 매개변수를 정의할 수 있으며 ...
기호를 함수의 마지막 매개변수 유형으로 사용하여 array
데이터 유형으로 가변 길이 매개변수를 나타낼 수 있습니다. 가변 길이 매개변수에는 매개변수가 호출에 전달된 시점부터의 모든 변수가 포함됩니다. 모든 유형의 변수를 전달할 수 있지만 데이터 유형의 불일치 충돌을 처리해야 합니다.
옵션 매개변수 (Optional parameters)
함수는 많은 매개변수를 가지지만 호출할 때에는 그 중 일부만 필요할 수 있습니다. 이 경우, 다음과 같이 선택적 매개변수를 선언할 수 있습니다: func myfunc(name string).Param1(param string).Param2(param2 int) {...}
, 그런 다음 호출할 때 지정된 매개변수를 원하는 순서로 호출할 수 있습니다: myfunc("name").Param2(100)
.
함수 본문에서는 이러한 변수들을 일반적으로 처리할 수 있습니다. 지정된 선택적 매개변수가 호출되지 않은 경우, 기본값은 0입니다. 또한 ...을 사용하여 가변 길이 매개변수를 지정할 수도 있습니다: func DBFind(table string).Where(request string, params ...)
그리고 이를 호출할 수 있습니다: DBFind("mytable").Where({" id": $myid, "type": 2})
Needle 함수 분류 (Needle functions classification)
데이터베이스에서 값 검색:
테이블의 데이터 업데이트:
어레이 작업:
계약 및 권한이 있는 작업:
주소가 있는 작업:
변수 값을 사용한 작업:
산술 연산:
JSON 작업:
문자열 작업:
바이트 작업:
SQL 형식의 날짜 및 시간 작업:
플랫폼 매개변수를 사용한 작업:
플랫폼 매개변수를 사용한 작업:
마스터 CLB 노드의 기능:
Needle 함수 참조 (Needle functions reference)
AppParam
지정된 응용 프로그램 매개변수의 값을 반환합니다 (응용 프로그램 매개변수 테이블 app_params에서).
구문
App
애플리케이션 ID.
name
애플리케이션 매개변수 이름.
Ecosystemid
생태계 ID.
예
DBFind
지정된 매개변수를 사용하여 지정된 테이블에서 데이터를 쿼리하고 객체 맵의 배열로 구성된 배열 배열을 반환합니다.
.Row()
는 쿼리에서 첫 번째 맵 요소를 가져올 수 있고, .One(열 문자열)
은 쿼리에서 지정된 열의 첫 번째 맵 요소를 가져올 수 있습니다.
구문
table
테이블 이름.
сolumns
열 목록을 반환합니다. 지정하지 않으면 모든 열이 반환됩니다.
값은 배열이거나 쉼표로 구분된 문자열입니다.
where
쿼리 조건.
예: .Where({name: "John"})
또는 .Where({"id": {"$gte": 4}})
.
이 매개변수는 검색 기준이 있는 객체 배열을 포함해야 합니다. 배열은 중첩된 요소를 포함할 수 있습니다.
다음 구문 구조가 사용됩니다.
{"field1": "value1", "field2": "value2"}
field1 = "value1" AND field2 = "value2"
와 동일합니다.
{"field1": {"$eq":"value"}}
field = "value"
와 동일합니다.
{"field1": {"$neq": "value"}}
field != "value"
와 동일합니다.
{"field1: {"$in": [1,2,3]}
field IN (1,2,3)
와 동일합니다.
{"field1": {"$nin": [1,2,3]}
field NOT IN (1,2,3)
와 동일합니다.
{"field": {"$lt": 12}}
field < 12
와 동일합니다.
{"field": {"$lte": 12}}
field <= 12
와 동일합니다.
{"field": {"$gt": 12}}
field > 12
와 동일합니다.
{"field": {"$gte": 12}}
field >= 12
와 동일합니다.
{"$and": [<expr1>, <expr2>, <expr3>]}
expr1 AND expr2 AND expr3
와 동일합니다.
{"$or": [<expr1>, <expr2>, <expr3>]}
expr1 OR expr2 OR expr3
와 동일합니다.
{field: {"$like": "value"}}
field like '%value%'
와 동일합니다 (퍼지 검색).
{field: {"$begin": "value"}}
field like 'value%'
와 동일합니다 (value로 시작).
{field: {"$end": "value"}}
field like '%value'
와 동일합니다 (value로 끝남).
{field: "$isnull"}
field is null
와 동일합니다.
객체 배열의 키를 덮어쓰지 않도록 하십시오. 예를 들어 id>2 및 id<5
로 쿼리하려는 경우 {id:{"$gt": 2}, id:{"$lt": 5}}
를 사용할 수 없습니다. 첫 번째 요소는 두 번째 요소로 덮어씁니다. 다음 쿼리 구조를 사용해야 합니다.
Id
ID로 쿼리합니다. 예를 들어, .WhereId(1).
Order
지정된 열 또는 기본적으로 ID별로 결과 집합을 정렬하는 데 사용됩니다.
정렬에 하나의 필드만 사용하는 경우 문자열로 지정할 수 있습니다. 여러 필드를 정렬하려면 문자열 객체의 배열을 지정해야 합니다.
내림차순: {"field": "-1"}
field desc
와 동일합니다.
오름차순: {"field": "1"}
field asc
와 동일합니다.
limit
항목 수를 반환합니다. 25, 기본적으로. 최대 수는 10,000입니다.
Offset
오프셋.
Ecosystemid
생태계 ID. 기본적으로 현재 생태계의 테이블이 쿼리됩니다.
예
DBRow
지정된 매개변수를 사용하여 지정된 테이블에서 데이터를 쿼리합니다. 객체 맵의 배열로 구성된 배열 배열을 반환합니다.
구문
table
테이블 이름입니다.
columns
열의 목록을 반환합니다. 지정하지 않으면 모든 열이 반환됩니다.
값은 배열이거나 쉼표로 구분된 문자열입니다.
where
쿼리 조건입니다.
예시: .Where({name: "John"})
또는 .Where({"id": {"$gte": 4}})
.
자세한 내용은 DBFind를 참조하세요.
Id
ID로 쿼리합니다. 예시: .WhereId(1)
.
Order
결과 집합을 지정된 열 또는 기본값인 id로 정렬하는 데 사용됩니다.
자세한 내용은 DBFind를 참조하세요.
Ecosystemid
생태계 ID입니다. 기본적으로 현재 생태계의 테이블을 쿼리합니다.
예
DBSelectMetrics
메트릭의 집계된 데이터를 반환합니다.
메트릭은 100개의 블록이 생성될 때마다 업데이트됩니다. 그리고 집계된 데이터는 1일 주기로 저장됩니다.
구문
metric
메트릭 이름
ecosystem_pages
생태계 페이지 수.
반환 값: 키 - 생태계 ID, 값 - 생태계 페이지 수.
ecosystem_members
생태계 구성원 수.
반환 값: 키 - 생태계 ID, 값 - 생태계 구성원 수.
ecosystem_tx
생태계 거래 수.
반환 값: 키 - 생태계 ID, 값 - 생태계 트랜잭션 수.
timeInterval
메트릭 데이터 집계를 위한 시간 간격입니다. 예: 1 day
, 30 days
.
aggregateFunc
함수를 집계합니다. 예: max
, min
, avg
.
예
EcosysParam
생태계 매개변수 테이블 매개변수에서 지정된 매개변수의 값을 반환합니다.
구문
예
GetHistory
지정된 테이블의 항목에 대한 변경 내역을 반환합니다.
구문
Return value
테이블의 항목에 대한 변경 기록을 지정하는 맵 유형의 개체 배열을 반환합니다.
각 배열에는 다음 변경을 수행하기 전에 레코드의 필드가 포함됩니다.
배열은 가장 최근에 변경된 순서대로 정렬됩니다.
배열의 id 필드는 rollback_tx 테이블의 id를 가리킵니다. block_id는 블록 ID를 나타내고 block_time은 블록 생성 타임스탬프를 나타냅니다.
예
GetHistoryRow
지정된 테이블의 지정된 항목의 변경 기록에서 단일 스냅샷을 반환합니다.
구문
GetColumnType
지정된 테이블에서 지정된 필드의 데이터 유형을 반환합니다.
구문
table
테이블 이름.
column
분야 명.
Return value
반환될 수 있는 유형은 text, varchar, number, money, double, bytes, json, datetime, double
입니다.
예
GetDataFromXLSX
XLSX 스프레드시트에서 데이터를 반환합니다.
구문
예
GetRowsCountXLSX
지정된 XLSX 파일의 줄 수를 반환합니다.
구문
예
LangRes
언어 lang에 대한 이름 레이블이 있는 다국어 리소스를 반환하며, 두 문자 코드로 지정됩니다(예: en
, kr
). 선택한 언어에 대한 언어가 없으면 en
레이블의 언어 리소스가 반환됩니다.
구문
예
GetBlock
지정된 블록에 대한 관련 정보를 반환합니다.
구문
Return value
객체 배열을 반환합니다.
예
DBInsert
지정된 테이블에 항목을 추가하고 항목 ID를 반환합니다.
구문
예
DBUpdate
지정된 테이블에서 지정된 항목 ID의 열 값을 변경합니다. 항목 ID가 테이블에 없으면 오류가 반환됩니다.
구문
예
DBUpdateExt
쿼리 조건과 일치하는 지정된 테이블의 열 값을 변경합니다.
구문
예
DelColumn
레코드가 없는 지정된 테이블의 필드를 삭제합니다.
구문
tblname
테이블 이름.
column
삭제할 필드입니다.
DelTable
레코드가 없는 지정된 테이블을 삭제합니다.
구문
예
Append
모든 유형의 val을 src 배열에 삽입합니다.
구문
Append(src array, val anyType) array
src
원래 배열입니다.
val
삽입할 값입니다.
예
Join
지정된 sep 구분자로 배열의 요소를 문자열로 결합합니다.
구문
In
어레이 이름.
sep
분리 기호 (Separator).
예
Split
sep 구분자를 사용하여 in 문자열을 요소로 분할하고 배열에 넣습니다.
구문
In
끈.
sep
분리 기호 (Separator).
예
Len
지정된 배열의 요소 수를 반환합니다.
구문
예
Row
이 경우 목록 매개변수를 지정하지 않아야 합니다. 배열 목록의 첫 번째 객체 배열을 반환합니다. 목록이 비어 있으면 빈 결과가 반환됩니다. 이 함수는 주로 DBFind 함수와 함께 사용됩니다. 이 기능을 사용할 때 매개변수를 지정할 수 없습니다.
구문
예
One
배열 목록에서 첫 번째 객체 배열의 필드 값을 반환합니다. 목록 배열이 비어있으면 nil 이 반환됩니다. 이 함수는 주로 DBFind 함수와 함께 사용됩니다. 이 함수를 사용할 때는 매개변수를 지정할 수 없습니다.
구문
DBFind 함수에서 반환된 개체 배열입니다.
예
GetMapKeys
객체 배열의 키 배열을 반환합니다.
구문
예
SortedKeys
객체 배열에서 정렬된 키 배열을 반환합니다.
구문
예
CallContract
지정된 이름으로 스마트 계약을 호출합니다. 계약에 있는 데이터 섹션의 모든 매개변수는 개체 배열에 포함되어야 합니다. 이 함수는 지정된 계약에 의해 $result 변수에 할당된 값을 반환합니다.
구문
name
호출되는 계약의 이름입니다.
params
계약 입력 데이터의 연관 배열입니다.
예
ContractAccess
실행 중인 계약의 이름이 매개변수에 나열된 이름 중 하나와 일치하는지 확인합니다. 일반적으로 테이블에 대한 계약 액세스를 제어하는 데 사용됩니다. 테이블 필드를 편집하거나 테이블의 권한 섹션에 새 열 필드를 삽입 및 추가할 때 권한 필드에 이 기능을 지정하십시오.
구문
예
ContractConditions
지정된 이름으로 계약서의 조건 섹션을 호출합니다.
이 계약 유형의 경우 데이터 섹션이 비어 있어야 합니다. 조건 섹션이 오류 없이 실행되면 true를 반환합니다. 실행 중 오류가 발생하면 오류로 인해 상위 계약도 종료됩니다. 이 함수는 일반적으로 테이블에 대한 계약의 액세스를 제어하는 데 사용되며 시스템 테이블을 편집할 때 권한 필드에서 호출할 수 있습니다.
구문
예
EvalCondition
tablename 테이블에서 'name' 필드가 있는 레코드의 condfield 필드 값을 가져오고 condfield 필드 값의 조건을 확인합니다.
구문
tablename
테이블 이름.
name
'name' 필드로 값을 쿼리합니다.
condfield
조건을 확인해야 하는 필드의 이름입니다.
예
GetContractById
계약 ID로 계약 이름을 반환합니다. 계약서를 찾을 수 없으면 빈 문자열이 반환됩니다.
구문
예
GetContractByName
이 함수는 계약 이름으로 계약 ID를 반환합니다. 계약서를 찾을 수 없으면 0이 반환됩니다.
구문
name
계약 테이블 계약의 계약 이름입니다.
예
RoleAccess
계약 호출자의 역할 ID가 매개변수에 지정된 ID 중 하나와 일치하는지 확인합니다.
이 기능을 사용하여 테이블 및 기타 데이터에 대한 계약 액세스를 제어할 수 있습니다.
구문
예
TransactionInfo
지정된 해시 값으로 트랜잭션을 쿼리하고 실행된 계약 및 해당 매개변수에 대한 정보를 반환합니다.
구문
hash
16진수 문자열 형식의 트랜잭션 해시입니다.
Return value
이 함수는 JSON 형식의 문자열을 반환합니다.
contract
계약명.
params
계약 매개변수에 전달된 데이터입니다.
block
트랜잭션을 처리한 블록의 ID입니다.
예
Throw
예외 유형의 오류를 생성합니다.
구문
ErrorId
오류 식별자.
ErrDescription
오류 설명.
Return value
이 유형의 거래 결과 형식은 다음과 같습니다.
예
ValidateCondition
조건 매개변수로 지정된 조건을 컴파일하려고 시도합니다. 컴파일 과정에서 오류가 발생하면 오류가 발생하고 호출된 계약이 종료됩니다. 이 기능은 조건부 형식의 정확성을 확인하도록 설계되었습니다.
구문
예
AddressToId
지갑 주소로 해당 계정 주소를 반환합니다. 유효하지 않은 주소를 지정하면 "0
" 이 반환됩니다.
구문
예
IdToAddress
계정 주소별로 해당 지갑 주소를 반환합니다. 유효하지 않은 주소를 지정하면 유효하지 않은 주소 invalid
가 반환됩니다.
구문
예
PubToID
계정 주소는 16진수 형식의 공개 키로 반환됩니다.
구문
예
DecodeBase64
base64 형식을 지정하여 문자열을 반환합니다.
구문
예
EncodeBase64
문자열을 지정하여 base64 형식의 문자열을 반환합니다.
구문
예
Float
정수 또는 문자열을 부동 숫자로 변환합니다.
구문
예
HexToBytes
16진수 형식의 문자열을 바이트 유형 바이트로 변환합니다.
구문
예
exp / 10 ^ 숫자의 문자열 값을 반환합니다.
구문
예
Random
구문
예
Int
문자열 형식의 값을 정수로 변환합니다.
구문
예
Hash
시스템 암호화 라이브러리 crypto에 의해 생성된 지정된 바이트 배열 또는 문자열의 해시를 반환합니다.
구문
예
Sha256
지정된 문자열의 SHA256 해시를 반환합니다.
구문
예
Str
정수 int 또는 float float 숫자를 문자열로 변환합니다.
구문
예
JSONEncode
숫자, 문자열 또는 배열을 JSON 형식의 문자열로 변환합니다.
구문
예
JSONEncodeIndent
지정된 들여쓰기를 사용하여 숫자, 문자열 또는 배열을 JSON 형식의 문자열로 변환합니다.
구문
src
변환할 데이터.
Indent
문자열은 들여쓰기로 사용됩니다.
예
JSONDecode
JSON 형식의 문자열을 숫자, 문자열 또는 배열로 변환합니다.
구문
예
HasPrefix
문자열이 지정된 문자열로 시작하는지 확인합니다.
구문
s
문자열.
prefix
확인할 접두사입니다.
Return value
문자열이 지정된 문자열로 시작하면 true
가 반환됩니다.
예
Contains
문자열에 지정된 하위 문자열이 포함되어 있는지 확인합니다.
구문
Return value
문자열에 하위 문자열이 포함되어 있으면 true
를 반환합니다.
예
Replace
문자열에서 old(이전 문자열)를 new(새 문자열)로 바꿉니다.
구문
s
원래 문자열입니다.
Old
바꿀 하위 문자열입니다.
new
새 문자열입니다.
예
Size
지정된 문자열의 바이트 수를 반환합니다.
구문
예
Sprintf
이 함수는 지정된 템플릿과 매개변수를 사용하여 문자열을 생성합니다.
사용 가능한 와일드카드:
%d
(정수) %s
(문자열) %f
(부동소수점) %v
(임의의 타입)
구문
예
Substr
지정된 문자열에서 offset (기본값으로부터 0 으로 계산)부터 시작하여 최대 길이 length로 얻은 부분 문자열을 반환합니다.
만약 offset 또는 length 가 0보다 작거나, offset이 문자열 길이보다 큰 경우 빈 문자열이 반환됩니다.
만약 offset 과 length의 합이 문자열의 크기보다 큰 경우, offset부터 문자열의 끝까지의 부분 문자열이 반환됩니다.
구문
val
문자열.
Offset
오프셋 (Offset).
length
하위 문자열의 길이입니다.
예
ToLower
지정된 문자열을 소문자로 반환합니다.
구문
예
ToUpper
지정된 문자열을 대문자로 반환합니다.
구문
예
TrimSpace
지정된 문자열의 선행 및 후행 공백, 탭 및 개행을 삭제합니다.
구문
예
Floor
지정된 숫자, 부동 숫자 및 문자열보다 작거나 같은 가장 큰 정수 값을 반환합니다.
구문
예
Log
지정된 숫자, 부동 숫자 및 문자열의 자연 로그를 반환합니다.
구문
예
Log10
지정된 숫자, 실수 숫자 및 문자열의 밑이 10인 로그를 반환합니다.
구문
예
Pow
지정된 기준을 지정된 거듭제곱(xy)으로 반환합니다.
구문
예
Round
가장 가까운 정수로 반올림된 지정된 숫자 값을 반환합니다.
구문
예
Sqrt
지정된 숫자의 제곱근을 반환합니다.
예
StringToBytes
문자열을 바이트로 변환합니다.
구문
예
BytesToString
바이트를 문자열로 변환합니다.
구문
예
SysParamString
지정된 플랫폼 매개변수의 값을 반환합니다.
구문
예
SysParamInt
지정된 플랫폼 매개변수의 값을 숫자 형식으로 반환합니다.
구문
예
DBUpdateSysParam
플랫폼 매개변수의 값과 조건을 업데이트합니다. 값이나 조건을 변경할 필요가 없다면 해당 매개변수에 빈 문자열을 지정하십시오.
구문
name
매개변수 이름.
value
매개변수의 새 값입니다.
conditions
매개변수 업데이트를 위한 새로운 조건.
예
UpdateNotifications
데이터베이스에서 지정된 키의 알림 목록을 가져와서 얻은 알림을 Centrifugo 로 보냅니다.
구문
예
UpdateRolesNotifications
데이터베이스에서 지정된 역할 ID의 모든 계정 주소에 대한 알림 목록을 획득하고 획득한 알림을 Centrifugo 로 보냅니다.
구문
예
HTTPRequest
지정된 주소로 HTTP 요청을 보냅니다.
참고
이 기능은 CLB 계약에서만 사용할 수 있습니다.
구문
Url
요청을 보낼 주소입니다.
method
요청 유형(GET 또는 POST).
heads
요청 헤더, 객체의 배열입니다.
pars
매개변수를 요청합니다.
예
HTTPPostJSON
이 함수는 HTTPRequest 함수와 유사하지만 POST 요청을 보내고 요청 매개변수는 문자열입니다.
참고
이 기능은 CLB 계약에서만 사용할 수 있습니다.
구문
Url
요청을 보낼 주소입니다.
heads
요청 헤더, 객체의 배열입니다.
pars
파라미터를 JSON 문자열로 요청합니다.
Example
BlockTime
블록의 생성 시간을 SQL 형식으로 반환합니다.
Syntax
예
DateTime
타임스탬프 unixtime을 YYYY-MM-DD HH:MI:SS 형식의 문자열로 변환합니다.
구문
예
UnixDateTime
YYYY-MM-DD HH:MI:SS 형식의 문자열을 타임스탬프 unixtime으로 변환합니다.
구문
예
CreateOBS
하위 CLB를 생성합니다.
이 기능은 마스터 CLB 모드에서만 사용할 수 있습니다.
구문
OBSName
CLB 이름.
DBUser
데이터베이스의 역할 이름입니다.
DBPassword
역할의 암호입니다.
OBSAPIPort
API 요청의 포트입니다.
예
GetOBSList
하위 CLB 목록을 반환합니다.
이 기능은 마스터 CLB 모드에서만 사용할 수 있습니다.
구문
Return value
키가 CLB 이름이고 값이 프로세스 상태인 개체 배열입니다.
RunOBS
CLB를 실행하는 프로세스.
이 기능은 마스터 CLB 모드에서만 사용할 수 있습니다.
구문
StopOBS
지정된 CLB의 프로세스를 중지합니다.
이 기능은 마스터 CLB 모드에서만 사용할 수 있습니다.
구문
RemoveOBS
지정된 CLB의 프로세스를 삭제합니다.
이 기능은 마스터 CLB 모드에서만 사용할 수 있습니다.
구문
CLB 이름.
영문과 숫자만 가능하며 공백 기호는 사용할 수 없습니다.
시스템 계약 (System Contracts)
시스템 스마트 계약은 IBax 블록체인 플랫폼이 실행될 때 기본적으로 생성됩니다. 이 모든 계약은 첫 번째 생태계에서 생성되었습니다. 이것이 다른 생태계에서 호출할 때 @1NewContract
와 같이 전체 이름을 지정해야 하는 이유입니다.
NewEcosystem
이 스마트 계약은 새로운 생태계를 생성합니다. 생성된 생태계의 ID를 얻으려면 txstatus에서 반환된 result 필드를 인용해야 합니다.
매개변수:
- Name string - 생태계의 이름. 이후에 변경할 수 있습니다.
EditEcosystemName
첫 번째 생태계에만 존재하는 1_ecosystems 테이블의 생태계 이름을 변경합니다.
매개변수:
- EcosystemID int - 생태계 ID의 이름을 변경합니다.
- NewName string - 생태계의 새 이름.
NewContract
현재 생태계에 새로운 스마트 계약을 생성합니다.
매개변수:
- ApplicationId int - 새로운 계약이 속하는 응용 프로그램;
- Value string - 계약 소스 코드. 상위 레벨에는 하나의 계약만 있어야 합니다.
- Conditions string - 계약의 조건을 변경합니다.
- TokenEcosystem int "optional" - 생태계 ID입니다. 계약이 활성화될 때 거래에 사용될 토큰을 결정합니다.
EditContract
현재 생태계에서 계약을 편집합니다.
매개변수:
- Id int - 변경할 계약 ID;
- Value string "optional" - 계약의 소스 코드;
- Conditions string "optional" - 계약의 조건을 변경합니다.
BindWallet
현재 생태계에서 스마트 계약을 지갑 주소에 바인딩합니다. 계약과 바인딩된 후, 계약 실행 수수료는 이 주소에서 지불됩니다.
매개변수:
- Id int - 바인딩할 계약 ID.
- WalletId string "optional" - 계약에 바인딩할 지갑 주소.
UnbindWallet
현재 생태계에서 계약과 지갑 주소의 바인딩을 해제합니다. 계약에 바인딩된 주소만 해제할 수 있습니다. 계약을 바인딩 해제한 후에는 계약을 실행하는 사용자가 실행 수수료를 지불합니다.
매개변수:
- Id int - 바인딩을 해제할 계약의 ID.
NewParameter
현재 생태계에 새로운 생태계 매개변수가 추가되었습니다.
매개변수:
- Name string - 매개변수 이름;
- Value string - 매개변수 값;
- Conditions string - 매개변수를 변경하기 위한 조건.
EditParameter
현재 생태계에서 기존 생태계 매개변수를 변경합니다.
매개변수:
- Name string - 변경할 매개변수의 이름;
- Value string - 새로운 매개변수 값;
- Conditions string - 매개변수를 변경하기 위한 새로운 조건.
현재 생태계에 새로운 메뉴를 추가합니다.
매개변수:
- Name string - 메뉴 이름;
- Value string - 메뉴 소스 코드;
- Title string "optional" - 메뉴 제목;
- Conditions string - 메뉴를 변경하기 위한 조건.
현재 생태계에서 기존 메뉴를 변경합니다.
매개변수:
- Id int - 변경할 메뉴의 ID;
- Value string "optional" - 새로운 메뉴의 소스 코드;
- Title string "optional" - 새로운 메뉴의 제목;
- Conditions string "optional" - 메뉴를 변경하기 위한 새로운 조건.
현재 생태계에 기존 메뉴에 소스 코드 내용을 추가합니다.
매개변수:
- Id int - 메뉴의 ID;
- Value string - 추가할 소스 코드.
NewPage
현재 생태계에 새로운 페이지를 추가합니다.
매개변수:
Name string - 페이지 이름;
Value string - 페이지의 소스 코드;
Menu string - 페이지와 관련된 메뉴 이름;
Conditions string - 페이지를 변경하기 위한 조건;
ValidateCount int "optional" - 페이지 유효성 검사에 필요한 노드 수. 이 매개변수를 지정하지 않으면 min_page_validate_count 생태계 매개변수 값이 사용됩니다. 이 매개변수의 값은 min_page_validate_count보다 작거나 max_page_validate_count보다 크지 않아야 합니다.
ValidateMode int "optional" - 페이지 유효성 검사 모드. 이 매개변수의 값이 0이면 페이지가 로드될 때 확인되고, 값이 1이면 페이지가 로드되거나 페이지를 떠날 때 확인됩니다.
EditPage
현재 생태계에서 기존 페이지를 변경합니다.
매개변수:
- Id int - 변경할 페이지의 ID;
- Value string "optional" - 새로운 페이지의 소스 코드;
- Menu string "optional" - 페이지와 관련된 새로운 메뉴 이름;
- Conditions string "optional" - 페이지를 변경하기 위한 새로운 조건;
- ValidateCount int "optional" - 페이지 유효성 검사에 필요한 노드 수. 이 매개변수를 지정하지 않으면 min_page_validate_count 생태계 매개변수 값이 사용됩니다. 이 매개변수의 값은 min_page_validate_count보다 작거나 max_page_validate_count보다 크지 않아야 합니다.
- ValidateMode int "optional" - 페이지 유효성 검사 모드. 이 매개변수의 값이 0이면 페이지가 로드될 때 확인되고, 값이 1이면 페이지가 로드되거나 페이지를 떠날 때 확인됩니다.
AppendPage
기존 페이지에 소스 내용을 추가합니다.
매개변수:
- Id int - 변경할 페이지의 ID;
- Value string - 추가할 소스 코드.
NewBlock
현재 생태계에 페이지 모듈을 추가합니다.
매개변수:
- Name string - 모듈의 이름;
- Value string - 모듈의 소스 코드;
- Conditions string - 모듈을 변경하기 위한 조건.
EditBlock
현재 생태계에서 기존 페이지 모듈을 변경합니다.
매개변수:
- Id int - 변경할 모듈의 ID;
- Value string - 새로운 모듈의 소스 코드;
- Conditions string - 모듈을 변경하기 위한 새로운 조건.
NewTable
현재 생태계에 새로운 테이블을 추가합니다.
매개변수:
- ApplicationId int - 관련 테이블의 애플리케이션 ID;
- Name string - 새로운 테이블의 이름;
- Columns string - 필드 배열을 JSON 형식으로 나타낸 문자열
[{"name":"...", "type":"...","index": "0", "conditions":".. ."},...]
, 여기서
- name - 필드 이름, 라틴 문자만 사용 가능;
- type - 데이터 유형
varchar,bytea,number,datetime,money,text,double,character
; - index - 비 기본 키 필드는
0
, 기본 키는 1
; - conditions - 필드 데이터를 변경하기 위한 조건, JSON 형식으로 "
{"update":"ContractConditions(MainCondition)", "read":"ContractConditions(MainCondition)"}
"와 같이 지정해야 합니다.
- Permissions string - JSON 형식의 접근 권한
{"insert": "...", "new_column": "...", "update": "...", "read": ".. ."}
.
- insert - 항목 삽입 권한;
- new_column - 새로운 열 추가 권한;
- update - 항목 데이터 변경 권한;
- read - 항목 데이터 읽기 권한.
EditTable
현재 생태계의 테이블의 접근 권한을 변경합니다.
매개변수:
- Name string - 테이블 이름;
- InsertPerm string - 테이블에 항목을 삽입하는 권한;
- UpdatePerm string - 테이블의 항목을 업데이트하는 권한;
- ReadPerm string - 테이블의 항목을 읽는 권한;
- NewColumnPerm string - 새로운 열을 생성하는 권한;
NewColumn
현재 생태계의 테이블에 새로운 필드를 추가합니다.
매개변수:
- TableName string - 테이블 이름;
- Name string - 라틴 문자로 된 필드 이름;
- Type string - 데이터 유형
varchar,bytea,number,money,datetime,text,double,character
; - UpdatePerm string - 열 값 변경 권한;
- ReadPerm string - 열 값 읽기 권한.
EditColumn
현재 생태계에서 지정된 테이블 필드의 권한을 변경합니다.
매개변수:
- TableName string - 테이블 이름;
- Name string - 변경할 라틴 문자로 된 필드 이름;
- UpdatePerm string - 열 값 변경을 위한 새로운 권한;
- ReadPerm string - 열 값 읽기를 위한 새로운 권한.
NewLang
현재 생태계에 언어 리소스를 추가하며, 이를 위한 권한은 생태계 매개변수의 changing_language로 설정됩니다.
매개변수:
- Name string - 라틴 문자로 된 언어 리소스 이름;
- Trans string - JSON 형식의 문자열, 키로는 두 글자로 된 언어 코드를 사용하고 값으로는 번역된 문자열을 사용합니다. 예를 들어
{"en": "영어 텍스트", "kr": "중국어 텍스트"}
.
EditLang
현재 생태계의 언어 자원을 변경하며, 이를 위한 권한은 생태계 매개변수의 changing_language 매개변수에 설정됩니다.
매개변수:
- Id int - 언어 리소스 ID.
- Trans - JSON 형식의 문자열, 키로는 두 글자로 된 언어 코드를 사용하고 값으로는 번역된 문자열을 사용합니다. 예를 들어
{"en": "영어 텍스트", "kr": "중국어 텍스트"}
.
Import
현재 생태계로 애플리케이션을 가져오고, ImportUpload 계약에서로드된 데이터를 가져옵니다.
매개변수:
- Data string - 생태계에서 내보낸 파일에서 가져온 텍스트 형식의 데이터입니다.
ImportUpload
외부 애플리케이션 파일을 현재 생태계의 buffer_data 테이블로로드하여 후속 가져오기에 사용합니다.
매개변수:
- InputFile file - 현재 생태계의 buffer_data 테이블에 기록된 파일입니다.
NewAppParam
현재 생태계에 새로운 애플리케이션 매개변수를 추가합니다.
매개변수:
- ApplicationId int - 애플리케이션 ID;
- Name string - 매개변수 이름;
- Value string - 매개변수 값;
- Conditions string - 매개변수를 변경할 수 있는 권한.
EditAppParam
현재 생태계에서 기존의 애플리케이션 매개변수를 변경합니다.
매개변수:
- Id int - 애플리케이션 매개변수 ID;
- Value string "optional" - 새로운 매개변수 값;
- Conditions string "optional" - 매개변수를 변경할 권한.
NewDelayedContract
지연 계약 스케줄러 데몬에 새로운 작업을 추가합니다.
지연된 계약 스케줄러는 현재 생성된 블록에서 필요한 계약을 실행합니다.
매개변수:
- Contract string - 계약 이름;
- EveryBlock int - 지정된 블록 수마다 계약이 실행됩니다;
- Conditions string - 작업을 변경할 수 있는 권한;
- BlockID int "optional" - 계약을 실행해야 하는 블록 ID입니다. 지정하지 않으면 "현재 블록 ID" + EveryBlock으로 자동 계산됩니다;
- Limit int "optional" - 작업 실행의 최대 횟수입니다. 지정하지 않으면 작업은 무제한으로 실행됩니다.
EditDelayedContract
지연된 계약 스케줄러 데몬에서 작업을 변경합니다.
매개변수:
- Id int - 작업 ID;
- Contract string - 계약 이름;
- EveryBlock int - 지정된 블록 수마다 계약이 실행됩니다;
- Conditions string - 작업을 변경할 수 있는 권한;
- BlockID int "optional" - 계약을 실행해야 하는 블록 ID입니다. 지정하지 않으면 "현재 블록 ID" + EveryBlock으로 자동 계산됩니다;
- Limit int "optional" - 작업 실행의 최대 횟수입니다. 지정하지 않으면 작업은 무제한으로 실행됩니다.
- Deleted int "optional" - 작업 전환. 값이
1
인 경우 작업이 비활성화됩니다. 값이 0
인 경우 작업이 활성화됩니다.
UploadBinary
X_binaries 테이블에 정적 파일을 추가하거나 덮어씁니다. HTTP API를 통해 계약을 호출할 때, 요청은 multipart/form-data
형식이어야 하며, DataMimeType 매개변수는 폼 데이터와 함께 사용됩니다.
매개변수:
- Name string - 정적 파일의 이름;
- Data bytes - 정적 파일의 내용;
- DataMimeType string "optional" - mime-type 형식의 정적 파일;
- ApplicationId int - X_binaries 테이블과 관련된 애플리케이션 ID입니다.
DataMimeType 매개변수를 전달하지 않으면 기본적으로 application/octet-stream
형식을 사용합니다.