1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/anycmd-tlang

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
README.md 4 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 26.11.2024 20:34 bc18a2d

Tlang

Tlang — это язык программирования класса Lisp, предназначенный для удаления виртуальной машины из блокчейна.

Виртуальная машина в блокчейне не является необходимой, поэтому можно использовать интерпретируемую форму выполнения tlang для выражения смарт-контрактов и предоставлять стандартные шаблоны транзакций. Обычные транзакции выполняются с использованием шаблонов транзакций, а сложные логические транзакции могут быть выражены разработчиками приложений на языке tlang (также можно использовать SDK для языков Java, .NET, JavaScript, Go и т. д., программы, написанные с помощью SDK, будут автоматически переведены на tlang).

Пример

Ниже приведён пример логики контракта, написанной на tlang.

Логика этого контракта заключается в том, что если вы хотите, чтобы результат выполнения контракта был истинным, то необходимо знать мой день рождения 23 июня 2017 года или предоставить pubKey и подпись, соответствующую этому ключу, для этой транзакции.

Чтобы сделать результат контракта истинным, вызывающий объект должен предоставить правильные данные: день рождения, pubKey и sign.

Данные, предоставленные вызывающей стороной:

(define birthDay "{birthDay}")
(define pubKey "{pubKey}")
(define sign "{sign}")

Приведённые выше пары ключ-значение поступают от вызывающего объекта, данные представляют собой пары ключ-значение, которые добавляются непосредственно в область действия во время выполнения без необходимости объединения кода, что исключает возможность внедрения кода.

Ниже приведены три строки логики смарт-контракта, которые являются статическими и не могут быть изменены вызывающим объектом.

Логика, определённая разработчиком контракта:

(define pubKeyHash="8658cefd0c1cf0ff294d14a66278f5a5490a1f8e")
(define myBirthDayHash="d4a0f6c5b4bcbf2f5830eabed3daa7304fb794d6")
(or 
	(= (hash160 birthDay) myBirthDayHash) 
	(and 
		(= (hash160 pubKey) pubKeyHash) 
		(= (decrypt pubKey sign) txHash)))

Функции and = hash160 или decrypt являются системными функциями, txHash или txId — это хэш текущей записи транзакции.

Если предоставляется функция checksig, то выражение (= (decrypt pubKey sign) txHash) также может быть записано как (checksig pubKey sign txHash).

PS: Кстати, этот пример не очень хорош, потому что день рождения можно перебрать, начиная с сегодняшнего дня и двигаясь назад на 100 лет, вычисляя хэш каждого дня и сравнивая его с myBirthDayHash, тогда можно будет забрать активы, заблокированные этим контрактом.

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/anycmd-tlang.git
git@api.gitlife.ru:oschina-mirror/anycmd-tlang.git
oschina-mirror
anycmd-tlang
anycmd-tlang
master